2015-07-10 67 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