原示範地址
本文內容
- 環境
- 示範 LazyList 從網路擷取圖片並緩衝
- 參考資料
本文是 Github 上的一個示範,通過網路擷取歌手專輯的縮圖,並顯示在 ListView 控制項中。該示範具備將縮圖緩衝到手機外存的功能,所以叫“Lazy”,這樣就不用每次都通過網路重新擷取。在學習這個示範前,希望你對 Android 的 Adpater 相關有一定的瞭解。
該示範僅僅是獲得縮圖,但在另一篇文章中,另一個作者根據這個 LazyList,又做了一個相對完整的示範(包括歌曲名稱、歌手名、時間長度、縮圖等資訊),像圖 3 所示。
環境
- Windows 2008 R2 64 位元
- Eclipse ADT V22.6.2,Android 4.4.3
- 三星 SM-G3508
示範 LazyList 從網路擷取圖片並緩衝
Github上的示範只有一個 Java 包,但我重新劃分了一下,便於理解作者的思路。原始碼就不貼了,你點擊此處下載。
圖 1 項目結構
- com.fedorvlasov.lazylist.activity 包是主程式。
- com.fedorvlasov.lazylist.cache 包,負責緩衝,包括緩衝在外存 FileCache 類和記憶體 MemoryCache 類。
- com.fedorvlasov.lazylist.utils 包,負責流操作。
- com.fedorvlasov.lazylist.view 包,負責從網路擷取歌手專輯的縮圖,並在 ListView 顯示,同時對縮圖進行緩衝。如果縮圖已緩衝,則 ListView 從緩衝擷取並顯示,否則,從網路擷取。 核心部分是,LazyAdapter 類,它繼承 BaseAdapter,返回 View,即 ListView 中的每行;ImageLoader 類,負責從網路獲得縮圖。
圖 2 左:主程式,從網路獲得縮圖;右:點擊“Clear Cache”清除緩衝重新載入
2 左邊所示,是主程式,從網路獲得縮圖並顯示。當點擊“Clear Cache”按鈕後,程式會清除緩衝,重新載入並顯示縮圖, 2 右邊所示,有顯示出歌手縮圖的,還有沒顯示出的,沒有顯示出來的,是正在從網路擷取~
圖 3 網路擷取音樂列表
這是另一個相對完整的示範,點擊此處下載,這個示範是在 LazyList 基礎完成的,但有 bug,程式不太穩定,程式的運行不是每次都能顯示出列表,即便顯示出來,縮圖卻顯示不出來,還沒搞清楚是怎麼回事(老外寫的東西,有時也不太靠譜),其中一個 bug 是因為版本較低,而 Android 4.0 以上的版本不允許在主線程訪問網路,你可以試試,要是弄明白了,麻煩您告訴我一下~
參考資料
- Github LazyList
- androidhive android-custom-listview-with-imgae-and-text
- androidhive android android-custom-listview-with-image-and-text 譯文
這三個連結的關係是,第二個連結的示範是根據第一個連結完成的,第三個連結翻譯的第二個連結。
下載 Demo
下載 Demo