繁体   English   中英

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

- 之后,声明并获取 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类中

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

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

谢谢,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM