Android類似微信圖片選擇器

很多項目要用到圖片選擇控件,每次都要寫一大堆邏輯。于是基于圖片選擇組件(PhotoPicker)封裝了一個控件PhotoUploadView做入。方便簡易臊泰,一鍵集成蛉加,幾句代碼就可以添加類似微信的圖片選擇控件了。下面介紹一下該控件有些什么特點以及怎么使用缸逃。先看圖:

效果如上圖针饥,點擊加號彈出選擇框,目前提供了兩種形式需频,一個如圖所見的PopupWindow丁眼,另一個是MaterialDialog,選擇拍照或者從圖庫獲取昭殉,從圖庫獲取后就進入圖二苞七,選擇完之后就圖三或圖四這里因為很多項目需要不一樣,所以特別封裝了:圖三的情況:上傳成功之后進度提示隱藏和失敗重發(fā)提示隱藏挪丢,或者是批量上傳不需要進度提示的和失敗重發(fā)的蹂风。圖四的情況:選擇完后遍歷上傳,有可能出現(xiàn)某一張上傳失敗吃靠。點擊圖中的重發(fā)按鈕觸發(fā)重發(fā)的事件當然如果你覺得刪除和重發(fā)的icon難看硫眨,完全可以自己取代替換它,刪除的圖標叫icon_photo_view_cancel巢块,重發(fā)的圖標叫icon_photo_view_resend礁阁,只需要按照這個命名,然后放在自己項目底下的mipmap包族奢,控件會自動替換姥闭,不需要去set什么。

先說依賴越走,可以在你項目的build.gradle添加依賴compile 'com.github.BmobSnail:PhotoUploadView:1.0.0'
又或者在我的github下載庫下來再導入棚品。然后在你的布局用使用改控件,PictureUploadView

<upload.view.PictureUploadView 
  android:id="@+id/pictureUploadView" 
  android:layout_width="match_parent" 
  android:layout_height="wrap_content" 
  android:layout_margin="@dimen/partition_normal" 
  android:horizontalSpacing="2dp" 
  android:numColumns="3" 
  android:scrollbars="none" 
  android:verticalSpacing="1dp" />```
看著這些屬性是不是很熟悉廊敌,沒錯铜跑!它就是基礎GridView的,所以完全可以當作GridView骡澈,GridView有的它也有锅纺,簡單易懂了吧。添加完這一步你就可以在布局看到圖一那樣有個加號的控件了肋殴。然后就是寫代碼的節(jié)奏了囤锉√沟埽控件可以選擇設置選擇原圖路徑還是壓縮后的路徑,因此就有了設置緩存路徑這一步在你的application中初始化一下緩存路徑官地,以后的壓縮后的圖片都緩存在這路徑底下
```java
String cache = StorageUtils.getOwnCacheDirectory(this, "Upload/photo").getAbsolutePath();
PictureLibrary.init(this, cache + "/");

緊接著就是使用了酿傍,控件執(zhí)行初始化init,之所以還要一次這樣初始化步驟是有項目需求是要編輯已發(fā)送成功的帶圖片的帖子驱入,那些圖也要顯示在選擇圖片控件上赤炒,所以有第五個參數(shù),獲取到圖片數(shù)據(jù)的集合后傳進去亏较,就能顯示那些網絡的圖片可霎,這時候可以刪除添加像普通那樣使用了。setShowMethod是使用那種風格顯示彈框

mPictureUploadView = (PictureUploadView) findViewById(R.id.pictureUploadView);
//第一個參數(shù)上下文
//第二個參數(shù)有CHAT(返回原圖路徑)宴杀,UPLOAD(返回壓縮路徑)
//第三個參數(shù)選擇個數(shù)//第四個參數(shù)默認為true(可不填)癣朗,false為不顯示上傳進度
//第五個參數(shù)默認為數(shù)據(jù)集合List(可不填)
mPictureUploadView.init(this, UploadPicHelper.UPLOAD, 3, true);
mPictureUploadView.setShowMethod(PictureUploadView.POPUPWINDOW);//POPUPWINDOW,DIALOGmPictureUploadView.setUploadCallBack(this);

設置一下回調方法并實現(xiàn)PictureUploadView.UploadCallBack并重寫兩個方法旺罢,添加的回調和刪除的回調旷余,mUploadMap為上傳成功之后保存成功的hashMap,mLocalMap為本地記錄添加和刪除的hashMap扁达,之后的上傳成功和上傳失敗要根據(jù)這個map的tag來決定哪個圖片的重發(fā)按鈕該顯示還是隱藏的正卧。

private Map<String, String> mUploadMap, mLocalMap; 

//添加圖片 
@Override 
public void onAddCallback(String path, String tag) { 
  mLocalMap.put(tag, path); 
  //upload(path, tag); 
} 

//刪除圖片 
@Override 
public void onRemoveCallback(String tag) { 
  mUploadMap.remove(tag); 
  mLocalMap.remove(tag);
}```

最后再重寫一下這個onActivityResult,不重寫不會除非上面兩個回調方法跪解,所以就看不到有圖片添加
```java 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
  if (resultCode == RESULT_OK) { 
    mPictureUploadView.setResult(requestCode, resultCode, data); 
  } 
super.onActivityResult(requestCode, resultCode, data); 
}```

只需要上面這幾步就可以實現(xiàn)像微信的那個圖片選擇控件一樣了炉旷,其它上傳回調的處理參考github里面的demo,有興趣的朋友可以試試叉讥,歡迎大家指正
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末窘行,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子图仓,更是在濱河造成了極大的恐慌罐盔,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件救崔,死亡現(xiàn)場離奇詭異惶看,居然都是意外死亡,警方通過查閱死者的電腦和手機六孵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門纬黎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人劫窒,你說我怎么就攤上這事本今。” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵诈泼,是天一觀的道長。 經常有香客問我煤禽,道長铐达,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任檬果,我火速辦了婚禮瓮孙,結果婚禮上,老公的妹妹穿的比我還像新娘选脊。我一直安慰自己杭抠,他們只是感情好,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布恳啥。 她就那樣靜靜地躺著偏灿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钝的。 梳的紋絲不亂的頭發(fā)上翁垂,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機與錄音硝桩,去河邊找鬼沿猜。 笑死,一個胖子當著我的面吹牛碗脊,可吹牛的內容都是我干的啼肩。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼衙伶,長吁一口氣:“原來是場噩夢啊……” “哼祈坠!你這毒婦竟也來了?” 一聲冷哼從身側響起矢劲,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤颁虐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后卧须,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體另绩,經...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年花嘶,在試婚紗的時候發(fā)現(xiàn)自己被綠了笋籽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡椭员,死狀恐怖车海,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤侍芝,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布研铆,位于F島的核電站,受9級特大地震影響州叠,放射性物質發(fā)生泄漏棵红。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一咧栗、第九天 我趴在偏房一處隱蔽的房頂上張望逆甜。 院中可真熱鬧,春花似錦致板、人聲如沸交煞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽素征。三九已至,卻和暖如春萝挤,著一層夾襖步出監(jiān)牢的瞬間稚茅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工平斩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留亚享,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓绘面,卻偏偏與公主長得像欺税,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子揭璃,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,870評論 25 707
  • 星墜落湖底晚凿,卻魂牽夢繞,終是一場夢不愿醒瘦馍! 真心賞月歼秽,奈何不圓。 明月知我心情组,唯有被遺忘很久的月亮燥筷,滿載著它的祝福...
  • 今天是三伏的第一天底瓣,我不但熱還燥谢揪。 當然這是一句廢話,誰不熱呢? 其實拨扶,我很想去哪里避個暑凳鬓,然后給自己放個假。 不...
    早晨好琴閱讀 553評論 0 1
  • 蘇州客 陳桂年輕時是廠花,老了依然是場花酒奶,廣場舞之花。 高鐵站廣場面積不小奶赔,除了嚴冬...
    蘇州客閱讀 471評論 2 2
  • 改編自:薛之謙《動物世界》MV 1 林如是 繁華的上海灘是不夜城惋嚎,流光溢彩,都是浮華站刑。 金錢和欲望到處充斥另伍,林如是...
    颼飗紅葉閱讀 666評論 6 11