2015-07-10 27 views
1

我有一个webview,我想变成我的应用程序的另一部分的位图。从Webview创建带有内容的屏幕的位图Android

目前,我可以获取将在屏幕上呈现的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); 

我一直遵守以下的教程和他们似乎并没有解决我的问题。

Rendering Android webview to bitmap, html5 javascript , callback issue

Generate bitmap from HTML in Android

我想使用一个PictureListener和capturePicture(),但那些已过时。

回答

3

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

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

此外,要知道,如果你的应用程序的目标是大号API级或以上,你需要WebView.enableSlowWholeDocumentDraw()之前,以使其的WebView的全部内容画在画布上创建任何网页视图打电话,看this

+0

感谢您的回应!我应该在哪里将WebView高度设置为wrap_contents?我目前使用的是我没有设计的自定义WebView,因此一旦我完成了我的图像,WebView的属性需要被恢复。 – Matt

+0

在您将要加载内容之前,肯定会有。与您已经使用的代码相同,只需使用“WRAP_CONTENT”常量而不是特定的高度值。 –

+0

这似乎不适用于我。我仍然会看到已经显示在设备上的webview部分,而不是整个网页。不过谢谢。 – Matt