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