拍摄webview android 5.0+的快照

时间:2015-05-11 11:30:35

标签: android webview android-5.0-lollipop snapshot

我有一个代码来拍摄WebView的快照,它在pre-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的快照?

1 个答案:

答案 0 :(得分:0)

这种拍摄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>

- 之后声明并获取 FrameLayout WebView的资源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或更高版本中会返回BLACK或WHITE位图。

此实施适用于Android 5.0以下Android 5.0以下的所有设备。

希望这种实施能够帮助某人。

谢谢,