Как да заснема уеб изглед в растерно изображение в Android?

Имам уеб изглед и трябва да превъртя надолу, за да видя цялото съдържание. Сега искам да уловя целия уеб изглед в растерно изображение.

Търсих много пъти. Хората ми предложиха да използвам функцията capturePicture(). Тази функция обаче е отхвърлена. И така, какви други методи мога да използвам, за да постигна целта си?

Благодаря на всички.


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


Отговори (2)


Android L, трябва да извикате WebView.enableSlowWholeDocumentDraw(), преди да създадете WebView. Тоест, ако имате някакви WebView във вашето оформление, уверете се, че сте извикали този метод, преди да извикате setContentView() във вашия onCreate().
свързано Михаил Наганов: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