【问题标题】:Creating Bitmap from Webview with content offscreen Android使用屏幕外Android内容从Webview创建位图
【发布时间】:2015-07-10 15:28:53
【问题描述】:

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

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

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

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

Rendering Android webview to bitmap, html5 javascript , callback issue

Generate bitmap from HTML in Android

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

【问题讨论】:

    标签: android webview bitmap


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复!我应该在哪里将 WebView 高度设置为 wrap_contents?我目前正在使用我没有设计的自定义 WebView,所以一旦我完成了我的图像,就需要恢复 WebView 的属性。
    • 绝对是在您将某些内容加载到其中之前。与您已经使用的代码相同,只需使用 WRAP_CONTENT 常量而不是特定的高度值。
    • 这似乎对我不起作用。我仍然得到已经在我的设备上显示的 webview 部分,而不是整个网页。不过还是谢谢。
    • 如果您的 WebView 出现在屏幕上,您是否将它放在 ScrollView 中?因为否则,WebView 就不能超出屏幕大小。
    • 我的目标是低于 API 21,但在运行高于它的设备上进行测试,所以一旦我启用 WebView.enableSlowWholeDocumentDraw(),事情就开始解决了。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2014-01-22
    相关资源
    最近更新 更多