[英]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.