从 WebView 捕获 HTML 作为图像?
Capture HTML from WebView as an Image?
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);
}
});
}
是的,使用WebView.draw()
是正确的方法。但是,从 onPageFinished
执行此操作并不能保证实际显示任何内容,因为在加载页面资源时会触发此事件,并且页面可以使用一些实际显示内容的 JS 代码。
正确的方法是使用 PictureListener.onNewPicture()
回调(尽管它已被弃用)。当 WebView 绘制了一些东西时仍然会触发此事件,但正如 documentation 所说,实际上并没有提供图片——为此,您必须调用 WebView.draw()
.
此外,请注意,如果您的应用面向 L API 级别或更高级别,您需要在创建任何 WebView 之前调用 WebView.enableSlowWholeDocumentDraw()
以使其绘制整个内容WebView 放到 canvas,见 this。
在 M 版本中情况会变得更好,其中添加了一个名为 VisualStateListener
的新回调(请参阅 this doc). You can check it out in the preview SDK。
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);
}
});
}
是的,使用WebView.draw()
是正确的方法。但是,从 onPageFinished
执行此操作并不能保证实际显示任何内容,因为在加载页面资源时会触发此事件,并且页面可以使用一些实际显示内容的 JS 代码。
正确的方法是使用 PictureListener.onNewPicture()
回调(尽管它已被弃用)。当 WebView 绘制了一些东西时仍然会触发此事件,但正如 documentation 所说,实际上并没有提供图片——为此,您必须调用 WebView.draw()
.
此外,请注意,如果您的应用面向 L API 级别或更高级别,您需要在创建任何 WebView 之前调用 WebView.enableSlowWholeDocumentDraw()
以使其绘制整个内容WebView 放到 canvas,见 this。
在 M 版本中情况会变得更好,其中添加了一个名为 VisualStateListener
的新回调(请参阅 this doc). You can check it out in the preview SDK。