从WebView捕获HTML作为图像?

时间:2015-07-08 12:33:05

标签: android android-webview

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);

        }
    });
}

1 个答案:

答案 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

中查看