最近開發中遇到了將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();