最近开发中遇到了将webview截图并分享的需求,研究了webview的几个截图方法都没成功,最后用一个View通用的截图方法成功了,这里记录下来,以便今后查阅
private Uri captureWebView(WebView webView){
Uri uri=null;
webView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
webView.layout(0,0,webView.getWidth(),webView.getHeight());
Bitmap bm=webView.getDrawingCache();
try {
File file=new File("/sdcard/capture.jpg");
FileOutputStream outputStream=new FileOutputStream(file);
bm.compress(Bitmap.CompressFormat.JPEG,80,outputStream);
uri= Uri.fromFile(file);
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return uri;
}
这个方法实际上对所有可视的View都通用,一般方法是:
- 从布局中得到View的对象;
- 打开图像缓存;
- 测量view的大小——view.measure();
- 发送位置和尺寸给自己及所有子view——view.layout();
- 从图像缓存中得到bitmap;
- 将图片处理成自己想要的格式;
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bitmap=view.getDrawingCache();