Android瀑布流圖片顯示-StaggeredGridView及三級快取
一、什麼是瀑布流

瀑布流
傳統手機照片牆裡面的相片都是規則的大小,整齊排列。瀑布流呈現出來的相片會給人一種交錯感,瀑布流除了應用在照片牆等功能外,在一些電商網站和APP上,商品展示介面一般都是用瀑布流顯示的。實現瀑布流的方式也很多比如常用的RecylerView,今天主要介紹的是GitHub上面非常流行的一款框架 StaggeredGridView。
二、環境整合
-
AndroidStudio
1.在Github上面下載這 兩個 檔案,注意是兩個!(左邊是依賴包,右邊是作者給出的原專案)
2.將左邊StaggeredGridView-develop中的檔案複製到AndroidStudio自己專案即可,注意 包名一致 。StaggeredGridView就是對GridView的升級,GridView的用法幾乎適用於StaggeredGridView。

3.在xml檔案中的使用,注意 drawSelectorOnTop=“true” ,這個一定要設定true。

4. 值得一提 StaggeredGridView 和 GridView 載入資料的方式都是相同的,但是資料載入完成,一定要呼叫一下 notifyDateSetChanged() ,否則資料不會自動重新整理!!!

-
eclipse直接匯入StaggeredGridView-develop這個依賴包到專案即可。
三、圖片的三級快取
StaggeredGridView環境整合比較簡單,關鍵是作者原專案給出的三級快取值得我們學習。
那什麼是三級快取呢?簡單的說就是展示一個圖片先從記憶體中提取,如果記憶體中沒有就從磁碟中提取,如果磁碟中有,展示圖片的同時會將圖片儲存在記憶體中。如果磁碟中也沒有就會進行最後一步,進行網路請求獲取圖片,獲取到的圖片展示時,同樣快取一份放入磁碟和記憶體中,以便下次直接使用。 做三級快取的好處有哪些? 在Android開發中,如果圖片過多,而我們又沒有對圖片進行有效的快取,就很容易導致OOM(Out Of Memory)異常,其次可以提高載入圖片的效率,節省流量,增強使用者體驗。因此,圖片的快取是非常重要的,尤其是對圖片非常多的應用。現在很多框架都做了很好的圖片快取處理,如 ofollow,noindex">【Fresco】 、 【Glide】 、Picasso、UIF、Volley等。(Fresco和Glide這兩個超連結寫的挺好)。

原理圖
,別的框架所用到的思路大體相同。在筆者看來這個專案的三級快取,麻雀雖小五臟俱全,非常適合初學者。
四、StaggeredGridView 專案中三級快取原始碼分析

StaggeredGridView三級快取原理圖
- 專案中記憶體快取採用的還是弱引用有點過時了。在Android2.3之前,可以通過軟引用或者弱引用來解決,但是Android2.3之後,Google推薦我們使用 LruCache。因為從 Android 2.3 (API Level 9)開始,垃圾回收器會更傾向於回收持有軟引用或弱引用的物件,這讓軟引用和弱引用變得不再安全。
弱引用
- imageViewResued()