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

Android 使用屏幕外内容从Webview创建位图,android,webview,bitmap,Android,Webview,Bitmap,我有一个webview,我想将其转换为应用程序另一部分的位图 目前,我可以获得将在屏幕上呈现的webview部分的位图,但是我的位图需要包含页面的所有内容 将webview的layoutParams设置为较大的大小会导致原始图像加载到较大的画布上 以下是我当前的实现: FrameLayout.LayoutParams tempParams= new FrameLayout.LayoutParams(2000,4000); _webView.setLayoutParams(tempParams);

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

目前,我可以获得将在屏幕上呈现的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);
我遵循了以下教程,但它们似乎无法解决我的问题


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

您可以将WebView高度设置为
wrap\u contents
,并将其自身调整为内容高度

您仍然可以使用
PictureListener.onNewPicture()
接收WebView已绘制内容的信号。这比使用
onPageFinished()。
PictureListener.onNewPicture()
的当前状态意味着无法从中获取图片,您需要使用
WebView.draw()
,就像您已经在做的那样


另外,请注意,如果您的应用程序目标为L API级别或更高级别,则在创建任何Web视图之前,您需要调用
WebView.EnablesLowHoleDocumentDraw()
,以便将WebView的全部内容绘制到画布上,请参见。

您可以将WebView高度设置为
wrap\u contents
,它将根据内容高度调整自身大小

您仍然可以使用
PictureListener.onNewPicture()
接收WebView已绘制内容的信号。这比使用
onPageFinished()。
PictureListener.onNewPicture()
的当前状态意味着无法从中获取图片,您需要使用
WebView.draw()
,就像您已经在做的那样


另外,请注意,如果您的应用程序目标为L API级别或更高级别,则需要在创建任何Web视图之前调用
WebView.EnablesLowHoleDocumentDraw()
,以便将WebView的全部内容绘制到画布上,请参阅。

感谢您的回复!我应该在哪里设置WebView高度以包装内容?我目前正在使用一个我没有设计过的自定义WebView,所以一旦我完成了图像的获取,WebView的属性就需要被还原。当然,在你准备加载一些东西之前。与您已经使用的代码相同,只需使用
WRAP\u CONTENT
常量而不是特定的高度值。这似乎对我不起作用。我仍然可以看到设备上已经显示的部分网络视图,而不是整个网页。不过谢谢。如果您的网络视图在屏幕上,您是否将其放在
滚动视图中?否则,WebView就无法超出屏幕大小。我的目标是API 21以下,但在运行API 21以上的设备上进行测试,因此启用WebView后。EnablesLowHoledOccumentDraw()一切都开始顺利进行。再次感谢!谢谢你的回复!我应该在哪里设置WebView高度以包装内容?我目前正在使用一个我没有设计过的自定义WebView,所以一旦我完成了图像的获取,WebView的属性就需要被还原。当然,在你准备加载一些东西之前。与您已经使用的代码相同,只需使用
WRAP\u CONTENT
常量而不是特定的高度值。这似乎对我不起作用。我仍然可以看到设备上已经显示的部分网络视图,而不是整个网页。不过谢谢。如果您的网络视图在屏幕上,您是否将其放在
滚动视图中?否则,WebView就无法超出屏幕大小。我的目标是API 21以下,但在运行API 21以上的设备上进行测试,因此启用WebView后。EnablesLowHoledOccumentDraw()一切都开始顺利进行。再次感谢!