使用屏幕外 Android 内容从 Webview 创建位图

Mat*_*att 1 android bitmap webview

我有一个 web 视图,我想将它转换为应用程序另一部分的位图。

目前,我可以获得将在屏幕上呈现的 webview 部分的位图,但是我的位图需要包含页面的所有内容。

将 webview 的 layoutParams 设置为更大的尺寸会导致原始图像加载到更大的画布上。

这是我目前的实现:

FrameLayout.LayoutParams tempParams= new FrameLayout.LayoutParams(2000,4000);
_webView.setLayoutParams(tempParams);
_webView.layout(0,0,2000,4000);
int width = _webView.getWidth();
int height = _webView.getHeight();

_webView.postDelayed(new Runnable() {
    @Override
    public void run() {
        Bitmap bitmap = Bitmap.createBitmap(_webView.getWidth(), _webView.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        _webView.draw(canvas);

    }
},100);
Run Code Online (Sandbox Code Playgroud)

我遵循了以下教程,它们似乎没有解决我的问题。

将 Android webview 渲染为位图、html5 javascript、回调问题

在 Android 中从 HTML 生成位图

我正在考虑使用 PictureListener 和 capturePicture() 但这些已被弃用。

Mik*_*nov 5

您可以将 WebView 高度设置为wrap_contents,它会将自身调整为内容高度。

您仍然可以使用PictureListener.onNewPicture()来接收 WebView 已绘制某些内容的信号。比使用更好onPageFinished(),因为后者只表明WebView已收到所有页面内容。的当前状态PictureListener.onNewPicture()意味着无法从中获取图片,您需要WebView.draw()像已经在做的那样使用。

另外,请注意,如果您的应用面向 L API 级别或更高级别,则需要WebView.enableSlowWholeDocumentDraw()在创建任何 WebView 之前调用,以便将 WebView 的全部内容绘制到画布上,请参阅