[英]How to capture a webview to bitmap in Android?
我有一个webview,我需要向下滚动才能查看所有内容。 现在,我想将整个webview捕获到位图。
我找了好几次。 人们建议我使用函数capturePicture()
。 但是, 不推荐使用此功能。 那么,我可以用什么方法来实现我的目标呢?
谢谢大家。
在Android L中,您需要在创建任何WebView之前调用WebView.enableSlowWholeDocumentDraw()。 也就是说,如果布局中有任何WebView,请确保在onCreate()中调用setContentView()之前调用此方法。
链接Mikhail Naganov : https : //stackoverflow.com/a/30084485/703225
@Override
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
WebView.enableSlowWholeDocumentDraw();
}
...
setContentView(layout);
...
...
}
然后:
/**
* WevView screenshot
*
* @param webView
* @return
*/
public static Bitmap screenshot(WebView webView, float scale11) {
try {
float scale = webView.getScale();
int height = (int) (webView.getContentHeight() * scale + 0.5);
Bitmap bitmap = Bitmap.createBitmap(webView.getWidth(), height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
webView.draw(canvas);
return bitmap;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
如果你不使用webView.getScale(),还:
public static Bitmap screenshot2(WebView webView) {
webView.measure(MeasureSpec.makeMeasureSpec(
MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
webView.layout(0, 0, webView.getMeasuredWidth(), webView.getMeasuredHeight());
webView.setDrawingCacheEnabled(true);
webView.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(webView.getMeasuredWidth(),
webView.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
int iHeight = bitmap.getHeight();
canvas.drawBitmap(bitmap, 0, iHeight, paint);
webView.draw(canvas);
return bitmap;
}
我找到了解决方案。 看看这个。
我使用onDraw来替换API 19中不推荐使用的capturePicture功能。如果你有更好的解决方案,请告诉我,我很感激。 谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.