抓拍 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
[=28声明并获取资源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
或以上它返回黑色或白色位图。
此实现在 Android 5.0
以下和 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
[=28声明并获取资源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
或以上它返回黑色或白色位图。
此实现在 Android 5.0
以下和 Android 5.0
.
希望此实现对某人有所帮助。
谢谢,