溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么優(yōu)雅的對(duì)Webview進(jìn)行截屏

發(fā)布時(shí)間:2021-12-21 09:52:11 來源:億速云 閱讀:108 作者:柒染 欄目:大數(shù)據(jù)

怎么優(yōu)雅的對(duì)Webview進(jìn)行截屏,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

如何優(yōu)雅的對(duì)Webview進(jìn)行截屏?

第一種方式

通過調(diào)用webview.capturePicture(),得到一個(gè)picture對(duì)象,根據(jù)圖像的寬和高創(chuàng)建一個(gè)Bitmap,再創(chuàng)建一個(gè)canvas,綁定bitmap,最后用picture去繪制。

怎么優(yōu)雅的對(duì)Webview進(jìn)行截屏

這種方式可以獲取webview中已加載的所有數(shù)據(jù)圖像,也就是長截屏的效果。這種方式在Android 4.4以下是沒有問題的,但是在5.0以上就行不通了。capturePicture()方法在4.4中廢棄掉了,官方建議使用onDrow()方法來獲取webview的bitmap快照。具體實(shí)現(xiàn)如下:

怎么優(yōu)雅的對(duì)Webview進(jìn)行截屏

但是此時(shí)在5.0+上會(huì)發(fā)現(xiàn),截取的快照只顯示了webview中顯示出來的那部分,沒有顯示出來的部分是空白的。通過google找到了原因,在5.0+版本上,Android對(duì)webview做了優(yōu)化,旨在減少內(nèi)存占用以提高性能。因此在默認(rèn)情況下會(huì)智能的繪制html中需要繪制的部分,其實(shí)就是當(dāng)前屏幕展示的html內(nèi)容,因此會(huì)出現(xiàn)未顯示的圖像是空白的。解決辦法是調(diào)用enableSlowWholeDocumentDraw()方法。這個(gè)方法需要在webview創(chuàng)建之前調(diào)用,在Activity里就是在setContentView前去調(diào)用,此方法會(huì)有顯著的性能開銷。 這里需要注意的是在傳遞webview的高度時(shí),是通過縮放率計(jì)算的,這樣就會(huì)算出繪制整個(gè)已加載的html內(nèi)容所需的高度。如果沒有這個(gè)縮放率,那么得到的快照就僅僅是這個(gè)html內(nèi)容最上面的那一段。還有一個(gè)問題就是在5.0+系統(tǒng)上得到快照比較模糊,在其他版本上沒有問題,不知道原因何在?

第二種方式

利用view的緩存功能。Android為了提高滾動(dòng)等各方面的繪制速度,可以為每一個(gè)view建立一個(gè)緩存,使用 View.buildDrawingCache為自己的view建立相應(yīng)的緩存, 這個(gè)cache就是一個(gè)bitmap對(duì)象。利用這個(gè)功能可以對(duì)整個(gè)屏幕視圖進(jìn)行截屏并生成Bitmap,也可以 獲得指定的view的Bitmap對(duì)象。 因此對(duì)于webview來說也可以使用這種方式,在使用getDrawingCache()方法獲取bitmap對(duì)象前,先開啟webview的緩存功能.

怎么優(yōu)雅的對(duì)Webview進(jìn)行截屏

需要注意的是,在上述情況下,這個(gè)緩存bitmap對(duì)象只有一個(gè),因此每次獲取的bitmap指向的是同一塊地址空間的緩存對(duì)象,如果在使用完bitmap后就立即回收掉這個(gè)對(duì)象,那么再次獲取當(dāng)前view的緩存對(duì)象時(shí)就會(huì)得到null。所以要在Activity銷毀時(shí)進(jìn)行回收,所以開啟緩存的話會(huì)有性能開銷。

第三種方式

比較簡(jiǎn)單,通過獲取當(dāng)前window的DecorView,然后繪制Bitmap對(duì)象。

怎么優(yōu)雅的對(duì)Webview進(jìn)行截屏

看完上述內(nèi)容,你們掌握怎么優(yōu)雅的對(duì)Webview進(jìn)行截屏的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI