Как захватить веб-просмотр в растровое изображение в Android?

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

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

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


person lolyoshi    schedule 03.01.2014    source источник


Ответы (2)


Android L, вам нужно вызвать WebView.enableSlowWholeDocumentDraw() перед созданием каких-либо WebView. То есть, если у вас есть какие-либо WebViews в вашем макете, убедитесь, что вы вызываете этот метод перед вызовом setContentView() в вашем onCreate().
Linked Михаил Наганов: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;
}
person qinmiao    schedule 12.03.2016
comment
Привет, Спасибо за помощь. когда я отлаживаю, 'webView.draw(canvas);' эта строка занимает 3 секунды. Нет ли способа использовать эту линию?? Когда я удаляю эту строку, я получаю пустую страницу. - person Adrian; 28.09.2016
comment
извините, понятия не имею. :-( Страница слишком большая? - person qinmiao; 28.09.2016

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

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

Что может заменить функцию capturePicture

person lolyoshi    schedule 07.01.2014