Webview截圖三種方式

2021-09-26 22:32:16 字數 2491 閱讀 5780

通過呼叫webview.capturepicture(),得到乙個picture物件,根據影象的寬和高建立乙個bitmap,再建立乙個canvas,繫結bitmap,最後用picture去繪製。

//獲取picture物件

picture picture = wv_capture.

capturepicture()

;//得到的寬和高(沒有reflect內容)

int width = picture.

getwidth()

;int height = picture.

getheight()

;if(width >

0&& height >0)

這種方式可以獲取webview中已載入的所有資料影象,也就是長截圖的效果。這種方式在android 4.4以下是沒有問題的,但是在5.0以上就行不通了。capturepicture()方法在4.4中廢棄掉了,官方建議使用ondrow()方法來獲取webview的bitmap快照。具體實現如下:

//獲取webview縮放率

float scale = wv_capture.

getscale()

;//得到縮放後webview內容的高度

int webviewheight =

(int

)(wv_capture.

getcontentheight()

*scale)

;bitmap bitmap = bitmap.

createbitmap

(wv_capture.

getwidth()

,webviewheight, bitmap.config.argb_8888)

;canvas canvas =

newcanvas

(bitmap)

;//繪製

wv_capture.

draw

(canvas)

;

但是此時在5.0+上會發現,擷取的快照只顯示了webview中顯示出來的那部分,沒有顯示出來的部分是空白的。通過google找到了原因,在5.0+版本上,android對webview做了優化,旨在減少記憶體占用以提高效能。因此在預設情況下會智慧型的繪製html中需要繪製的部分,其實就是當前螢幕展示的html內容,因此會出現未顯示的影象是空白的。解決辦法是呼叫enableslowwholedocumentdraw()方法。這個方法需要在webview建立之前呼叫,在activity裡就是在setcontentview前去呼叫,此方法會有顯著的效能開銷。

這裡需要注意的是在傳遞webview的高度時,是通過縮放率計算的,這樣就會算出繪製整個已載入的html內容所需的高度。如果沒有這個縮放率,那麼得到的快照就僅僅是這個html內容最上面的那一段。還有乙個問題就是在5.0+系統上得到快照比較模糊,在其他版本上沒有問題,不知道原因何在?

利用view的快取功能。android為了提高滾動等各方面的繪製速度,可以為每乙個view建立乙個快取,使用 view.builddrawingcache為自己的view建立相應的快取, 這個cache就是乙個bitmap物件。利用這個功能可以對整個螢幕檢視進行截圖並生成bitmap,也可以 獲得指定的view的bitmap物件。

因此對於webview來說也可以使用這種方式,在使用getdrawingcache()方法獲取bitmap物件前,先開啟webview的快取功能.

webview.

setdrawingcacheenabled

(true);

...bitmap bitmap = webview.

getdrawingcache()

;

需要注意的是,在上述情況下,這個快取bitmap物件只有乙個,因此每次獲取的bitmap指向的是同一塊位址空間的快取物件,如果在使用完bitmap後就立即**掉這個物件,那麼再次獲取當前view的快取物件時就會得到null。所以要在activity銷毀時進行**,所以開啟快取的話會有效能開銷。

比較簡單,通過獲取當前window的decorview,然後繪製bitmap物件。

view view  = context.

getwindow()

.getdecorview()

;bitmap bitmap = bitmap.

createbitmap

(view.

getwidth()

, view.

getheight()

, bitmap.config.argb_8888)

;canvas canvas =

newcanvas

(bitmap)

;view.

draw

(canvas)

;

try

catch

(exception e)

finally

}

Webview截圖三種方式

第一種方式 通過呼叫webview.capturepicture 得到乙個picture物件,根據影象的寬和高建立乙個bitmap,再建立乙個canvas,繫結bitmap,最後用picture去繪製。獲取picture物件 picture picture wv capture.capturepic...

C 中三種截圖方式總結

using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.text using system.window...

WebView的截圖實現

webview的截圖主要有兩種實現方式 方式1 bitmap webview.getdrawingcache 可是,webview必需要mwebview.setdrawingcacheenabled true 此方式僅僅能擷取螢幕顯示的內容 方式2 picture snapshot webview....