Android:支持多選的本地相冊

前段時間在作一個動態發佈功能,須要用到圖片上傳。一開始直接調用的系統相冊和相機,因爲系統相機不支持多選,就花點時間作了個本地相冊,在此開源下。git

先上截圖,依次爲選擇相冊界面、相冊詳情界面、查看圖片大圖界面github

  

相冊列表按圖片數量降序排序,相冊詳情列表按圖片時間降序排序,對比了下微信和QQ的相冊,讀取的文件基本一致。數據庫

接下來講下相冊文件遍歷的思路。首先確定不會是經過文件夾逐級遍歷的,這樣效率過低。查了下API發現Android的系統數據庫已經存儲了全部的圖片路徑和縮略圖路徑(若是有),可直接經過ContentProvider來獲取,獲取大圖的URI是緩存

MediaStore.Images.Media.EXTERNAL_CONTENT_URI

獲取縮略圖的URI是微信

MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI

個人作法是先遍歷全部大圖,獲取ID和路徑,再經過大圖的ID去查找縮略圖路徑,在相冊中顯示的都是縮略圖,這樣能夠提升顯示速度,同時減小內存開銷。可是經過大圖ID去查找縮略圖這一步是須要消耗一點時間的,所以將它在App啓動時,開啓線程執行。LocalImageHelper類用以執行該操做。ide

待完善點:相冊的初始化是放在應用啓動時,初始化一次後就再也不從新執行,所以假如在應用開啓後,設備內添加了新的圖片或刪除了圖片,應用內緩存的相冊仍然不會改變,下一步能夠在每次打開相冊時和本地圖片作一次對比,對新增的和刪除的圖片作一個更新。spa

Demo中使用了ImageLoader庫來展現圖片,使用的是Android Studio開發。線程

 

GitHub地址:https://github.com/LinJZong/LocalAlbum.gitcode

相關文章
相關標籤/搜索