WebView有2个不推荐使用的方法,用于将内容捕获为图像:
capturePicture()
setPictureListener()
由于这些已被弃用,现在可以将webview内容捕获为图像吗?
现在这是正确的方法:
public void takePicture() {
WebView webView = new WebView(context);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
Bitmap b = Bitmap.createBitmap(view.getWidth(), view.getContentHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
view.draw(c);
}
});
}
答案 0 :(得分:2)
是的,使用WebView.draw()
是正确的方法。但是,从onPageFinished
执行此操作并不能保证实际显示任何内容,因为在加载页面资源时会触发此事件,并且页面可以使用实际显示内容的某些JS代码。
正确的方法是使用PictureListener.onNewPicture()
回调(尽管已弃用状态)。当WebView绘制某些内容时,此事件仍会被触发,但正如documentation所说,实际上并未提供图片 - 为此,您必须调用WebView.draw()
。
另外,请注意,如果您的应用定位到L API级别或更高级别,则需要在创建任何WebView之前调用WebView.enableSlowWholeDocumentDraw()
,以便将WebView的全部内容绘制到画布上,请参阅this
M版本会有所改善,其中添加了一个名为VisualStateListener
的新回调(参见this doc)。您可以在preview SDK。