我有一个代码来拍摄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的快照?
答案 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
以下的所有设备。
希望这种实施能够帮助某人。
谢谢,