android - 从 Android 屏幕外内容的 Webview 创建位图

标签 android webview bitmap

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

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

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

这是我当前的实现:

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

我已按照以下教程进行操作,但它们似乎无法解决我的问题。

Rendering Android webview to bitmap, html5 javascript , callback issue

Generate bitmap from HTML in Android

我正在考虑使用 PictureListener 和 capturePicture(),但它们已被弃用。

最佳答案

您可以将 WebView 高度设置为 wrap_contents,它会根据内容高度自行调整大小。

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

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

关于android - 从 Android 屏幕外内容的 Webview 创建位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31344667/

相关文章:

android - 复制岛只有一组图像,为什么?

c# - 锁定不会阻止 InvalidOperationException : Object is currently in use elsewhere

android - 如何使用布局膨胀一个 View

android - 以编程方式自定义 Android Wear watch 超时

java - 如何将一周的第一天和一周的最后一天设置为白色?

android - 在自定义 View 中设置 textSize 会产生巨大的文本

android - 在 Android 模拟器上,尝试加载 webview 我得到 net::err_cache_miss

java - 自动填写 webview 中的字段

android - 来自画廊的图像自动旋转 - Android

android - WebView 2.2 与 3.1