2014-01-03 3 views
7

У меня есть веб-просмотр, и мне нужно прокрутить вниз, чтобы просмотреть весь контент. Теперь я хочу, чтобы захватил весь веб-просмотр в растровое изображение.Как захватить веб-просмотр в растровое изображение в Android?

Я искал много раз. Люди предложили мне использовать функцию capturePicture(). Однако эта функция устарела. Итак, какие другие методы я могу использовать для достижения своей цели?

Спасибо всем.

ответ

2

Я нашел решение. Взгляните на это.

Я использовал onDraw для замены функции capturePicture, которая устарела в API 19. Если у вас есть какие-то лучшие решения, скажите мне, и я ценю это. Благодаря!

Which can replace capturePicture function

8

Android L, вам нужно вызвать WebView.enableSlowWholeDocumentDraw() перед созданием WebViews. То есть, если у вас есть какие-либо WebViews в вашем макете, убедитесь, что вы вызываете этот метод до вызова setContentView() в вашей onCreate().
связаны Mikhail Naganov: https://stackoverflow.com/a/30084485/703225

@Override 
@TargetApi(Build.VERSION_CODES.LOLLIPOP) 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     WebView.enableSlowWholeDocumentDraw(); 
    } 
    ... 
    setContentView(layout); 
    ... 
    ... 
} 

затем:

/** 
* WevView screenshot 
* 
* @param webView 
* @return 
*/ 
public static Bitmap screenshot(WebView webView, float scale11) { 
    try { 
     float scale = webView.getScale(); 
     int height = (int) (webView.getContentHeight() * scale + 0.5); 
     Bitmap bitmap = Bitmap.createBitmap(webView.getWidth(), height, Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(bitmap); 
     webView.draw(canvas); 
     return bitmap; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

, если вы не используете webView.getScale(), а также:

public static Bitmap screenshot2(WebView webView) { 
    webView.measure(MeasureSpec.makeMeasureSpec(
        MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED), 
      MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
    webView.layout(0, 0, webView.getMeasuredWidth(), webView.getMeasuredHeight()); 
    webView.setDrawingCacheEnabled(true); 
    webView.buildDrawingCache(); 
    Bitmap bitmap = Bitmap.createBitmap(webView.getMeasuredWidth(), 
      webView.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 

    Canvas canvas = new Canvas(bitmap); 
    Paint paint = new Paint(); 
    int iHeight = bitmap.getHeight(); 
    canvas.drawBitmap(bitmap, 0, iHeight, paint); 
    webView.draw(canvas); 
    return bitmap; 
} 
+0

Привет, спасибо за помощь ур. когда я отлаживаю, 'webView.draw (canvas);' эта линия занимает 3 секунды. Нет ли способа использовать эту строку? Когда я удаляю эту строку, я получаю пустую страницу. – Adrian

+0

Извините, я понятия не имею. :-(Страница слишком большая? – qinmiao

+0

haha ​​yep. Довольно большой. Может быть, это и есть причина .. – Adrian