Android使用Glide加載超長圖 [復制鏈接]

2019-1-28 10:21
shareiOS 閱讀:432 評論:1 贊:0
Tag:  

app項目開發過程中,大都有查看圖片詳情的功能模塊。實現的方式一般都是通過viewpager+photoView+Glide的方式。這種方式下,如果碰到加載超長圖,比如說高清版的清明上河圖/世界地圖,肯定就加載不出來了。


系統會提示如下異常:


log的意思就是圖片太大了。這個時候BitmapRegionDecoder就派上了用場了。

android開發文檔的解釋是BitmapRegionDecoder允許從圖片扣取一個圖塊加載,這就能很好的加載高清長圖也能有效的防止內存溢出了。


SubsamplingScaleImageView就是基于BitmapRegionDecoder封裝的開源框架。


GitHub地址:https://github.com/davemorrissey/subsampling-scale-image-view.git  


現在問題來了,我們要在原有viewpager+photoView+Glide的基礎上加上SubsamplingScaleImageView。photoView+Glide的方式能加載普通圖和GIF圖,SubsamplingScaleImageView是基于BitmapRegionDecoder,不能加載GIF圖。(如果需要加載超大/幀數比較多的GIF,需要另找算法處理)

    

關鍵代碼如下:

1.根據圖片url后綴判斷圖片是否GIF圖,如果是GIF圖,執行GIF圖的加載策略;

2.普通圖片先通過Glide加載得到Bitmap的寬/高,如果高度超過了定義的MaxSize或者寬高比超過了MaxScale,就認為是超長圖,需要通過SubsamplingScaleImageView去顯示。為了使超長圖平鋪滿屏幕的寬度從(0,0)點開始顯示,我們需要計算zoom的scale的size。


計算方式如下:

3.普通非超長圖 就簡單了直接通過photoView去顯示。



分享到:
我來說兩句
facelist
您需要登錄后才可以評論 登錄 | 立即注冊
所有評論(1)
言倫 2019-2-12 16:18
   感謝分享
回復

領先的中文移動開發者社區
18620764416
7*24全天服務
意見反饋:[email protected]

掃一掃關注我們

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粵ICP備15117877號 )

两码中特期期