Android開發之高仿微信圖片選擇器

記得剛開始做Andriod項目那會,經常會碰到一些上傳圖片的功能需求,特別是社交類的app,比如用戶頭像,說說配圖,商品配圖等功能都需要讓我們到系統相冊去選取圖片,但官方卻沒有提供可以選取多張圖片的相關API,所以那時候會到Github上去找找相關的開源庫,也覺得挺方便的,但隨著后來Android系統的更新,帶來了很多新特性和API的改變,比如從Android6.0后的動態權限申請,7.0的私有目錄權限以及一些API的廢棄(Uri.fromFile等),但所用的開源庫作者又沒有很及時的去更新適配,又或者一些開源庫直接在庫中引入了圖片加載框架,導致項目中存在多個圖片加載框架,這樣就造成了包體積的增大和方法數的增加,導致項目中或多或少會出現一些問題,所以那時萌生了想自己寫一個圖片選擇器,盡可能的做到簡潔,速度快,然后一個圖片選擇器的庫就這么誕生了:ImagePicker圖片加載器

實現效果圖:

效果圖1

效果圖2

效果圖3

效果圖4

相比1.0.+版本,2.0版本進行了代碼的大塊重構,注重模塊間的代碼解耦,簡化了配置,將兼容Android7.0所需要的FileProvider下沉到庫中完成,不再需要開發者配置,并對GIF圖,視頻,大圖預覽等功能有了支持。

1、如何在項目中引入該圖片加載庫:

//gradle版本在3.0以下引入此行
compile 'com.lcw.library:imagepicker:2.2.0'

//gradle版本在3.0以上引入此行
implementation 'com.lcw.library:imagepicker:2.2.0'

2、一行代碼調用:

                ImagePicker.getInstance()
                        .setTitle("標題")//設置標題
                        .showCamera(true)//設置是否顯示拍照按鈕
                        .showImage(true)//設置是否展示圖片
                        .showVideo(true)//設置是否展示視頻
                        .setSingleType(true)//設置圖片視頻不能同時選擇
                        .setMaxCount(9)//設置最大選擇圖片數目(默認為1,單選)
                        .setImagePaths(mImageList)//保存上一次選擇圖片的狀態,如果不需要可以忽略
                        .setImageLoader(new GlideLoader())//設置自定義圖片加載器
                        .start(MainActivity.this, REQUEST_SELECT_IMAGES_CODE);//REQEST_SELECT_IMAGES_CODE為Intent調用的requestCode

3、如何獲取選中的圖片集合:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_SELECT_IMAGES_CODE && resultCode == RESULT_OK) {
            List<String> imagePaths = data.getStringArrayListExtra(ImagePicker.EXTRA_SELECT_IMAGES);
        }
    }

4、如何自定義圖片加載器(不定死框架,讓框架更加靈活,需要去實現ImageLoader接口即可):

public class GlideLoader implements ImageLoader {
    //to do something 可以參考Demo用法
}

寫在最后:

這個庫會持續維護下去,后續會把大圖預覽,裁剪等功能添加進去,遵循極簡的原則,把庫做的盡可能的小,歡迎大家提建議,更加具體的使用請參考下面源碼中的Demo演示~

版本更新里程碑:

Version1.0.0:

1、可預覽各文件夾下的圖片
2、可配置是否支持相機拍照
3、可配置選擇圖片模式(單選/多選)
4、可配置選擇圖片數量 5、可配置圖片加載框架

Version1.1.0:

1、新增大圖預覽功能(初步實現,考慮性能后期會改為Fragment承載,單一Activity架構)
2、更改選擇圖片文件夾彈窗高度
3、更改ImageLoader接口,開放小圖加載、大圖加載、清除緩存方法

Version2.0.0:

1、重構了大量的代碼,更加注重代碼間的解耦,相比1.0版本簡化了配置項(下沉FileProvider),讓開發者可以更專注于業務。
2、添加媒體庫掃描對GIF、視頻的支持,并開放接口讓開發者自行實現視頻播放邏輯。
3、添加媒體庫加載策略,開發者可自行配置加載圖片或者視頻,靈活運用于不同業務實現。
4、完善大圖預覽功能,完善部分UI界面的顯示。

源碼下載:

這里附上源碼地址(歡迎Star,歡迎Fork):ImagePicker

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,250評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,923評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,041評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,475評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,253評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,801評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,882評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,023評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,530評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,494評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,639評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,177評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,890評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,289評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,552評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,242評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,626評論 2 370

推薦閱讀更多精彩內容