抓拍 webview android 5.0+

Take snapshot of webview android 5.0+

我有一个代码可以拍摄 WebView 的快照,它在 L 之前的版本上完美运行:

DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
    float changeSizeCoefficient = calculateChangeCoef(displayMetrics);
    int sizeTo = (int) (238f * displayMetrics.density * changeSizeCoefficient);

    int height = webView.getWidth() > webView.getContentHeight() ? webView.getContentHeight() : webView.getWidth();
    Bitmap snapshot = Bitmap.createBitmap(webView.getWidth(), height, Bitmap.Config.ARGB_8888);

    Canvas bitmapCanvas = new Canvas(snapshot);
    webView.draw(bitmapCanvas);

    Bitmap resizedSnapshot = Bitmap.createScaledBitmap(snapshot, sizeTo, sizeTo, false);

    if (!resizedSnapshot.equals(snapshot))
        snapshot.recycle();

    return resizedSnapshot;

但是在 5.0+ 版本上,快照上 WebView 的不可见部分被填充为白色。

如何在 Android 5.0+ 上拍摄所有 WebView 的快照?

这种拍摄 WebView 快照的实现将适用于任何 Android 设备,

->将 WebView 放入 FrameLayout

<FrameLayout
    android:id="@+id/fl_web_webview_activity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
       <WebView
           android:id="@+id/wv_webview_activity"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           />
</FrameLayout>

-之后为FrameLayoutWebView[=28声明并获取资源ID =]

在你的Activity里面写

WebView mWebView = (WebView) findViewById(R.id.wv_webview_activity);
FrameLayout  fl_web_webview_activity = (FrameLayout)findViewById(R.id.fl_web_webview_activity);

之后把这个方法放在Activity Class

public static Bitmap loadBitmapFromView(View v, int width, int height) {
    Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
    v.draw(c);
    return b;
}

现在调用上面的方法获取你的WebView

的位图数据
Bitmap b = loadBitmapFromView(fl_web_webview_activity, fl_web_webview_activity.getWidth(), fl_web_webview_activity.getHeight());

如果您使用 mWebView 而不是 fl_web_webview_activity,它在 Android 5.0 以下工作正常,但在 Android 5.0 或以上它返回黑色或白色位图。

此实现在 Android 5.0 以下和 Android 5.0.

以下的每个设备上都能完美运行

希望此实现对某人有所帮助。

谢谢,