Android 拍摄webview安卓5.0+;

Android 拍摄webview安卓5.0+;,android,webview,android-5.0-lollipop,snapshot,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 * changeSiz

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

此拍摄
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>
然后将此方法放入
活动
类中

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\u web\u webview\u activity
在以下
Android 5.0
中工作正常,但在
Android 5.0
或更高版本中返回黑白位图


这个实现在低于
Android 5.0
和高于
Android 5.0
的所有设备上都能完美运行

希望这个实现能帮助别人


谢谢,

请看@Mikhail Naganov,thx,为我工作。@Ufkoku你能把你的calculateChangeCoef代码写出来,这样它就可以帮助其他人解决这个问题吗?@NovusMobile我2年多前问过这个问题,现在我无法访问这个代码。我想您可以使用上面Mikhail Naganov建议的答案,或者下面sahulab.Thx建议的答案作为答案,但建议的代码只拍摄WebView可见部分的快照。我的代码拍摄webview内容的快照,这超出了屏幕范围。在我的问题下,评论中链接的答案在我的情况下更好@但我在Android 4.4,4.4.4,5.0,4.0中测试了整个网络视图的快照,所以我可以知道你的移动操作系统的详细信息吗?
Bitmap b = loadBitmapFromView(fl_web_webview_activity, fl_web_webview_activity.getWidth(), fl_web_webview_activity.getHeight());