关于 WebView 截图 网上已经有很多例子了,但是在研究使用的时候发现一些问题,在这记录一下,供大家参考。
首先是WebView 的截图,只能截取WebView 内显示的内容。大小也就是WebView 的大小,方法很简单,直接上代码。
private Bitmap captureWebView(WebView webView){
Picture snapShot = webView.capturePicture();
Bitmap bmp = Bitmap.createBitmap(snapShot.getWidth(), snapShot.getHeight(), Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bmp);
snapShot.draw(canvas);
return bmp;
}
之后就是整个WebView 生成的长图,先上代码。
private Bitmap captureWebViewLong(WebView webView){
float scale = webView.getScale();
int webViewHeight = (int) (webView.getContentHeight()*scale+0.5);
Bitmap bitmap = Bitmap.createBitmap(webView.getWidth(),webViewHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
webView.draw(canvas);
return bitmap;
}
但是WebView在5.0之后更改了机制,如图
所以我们要先调用enableSlowWholeDocumentDraw() ,才能把整个网页的长图生成。这个enableSlowWholeDocumentDraw() 方法 需要在WebView声明之前调用,比如
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
WebView.enableSlowWholeDocumentDraw();
setContentView(R.layout.activity_main);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(true); //支持缩放
webView.requestFocusFromTouch();
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
webView.loadUrl("http://www.baidu.com");
}
上面的部分,其实有很多大神都说过了,就不在赘述了。
最后 还有一坑的地方,就是如果这个html页面里把 html标签 的高度写成100%像下面这样
<html style = "height: 100%;">
</html>
或者这样
/***********
这里是 css代码
************/
html {
height: 100%;
}
如果html写成这样,那么就无法获取到整个html的高度也就无法生成长图,最后的效果跟截图的效果一样只能截取WebView 显示的部分。
完~~good 拜