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" />
看著這些屬性是不是很熟悉,沒錯!它就是基礎(chǔ)GridView的,所以完全可以當作GridView,GridView有的它也有,簡單易懂了吧。添加完這一步你就可以在布局看到圖一那樣有個加號的控件了。然后就是寫代碼的節(jié)奏了??丶梢赃x擇設置選擇原圖路徑還是壓縮后的路徑,因此就有了設置緩存路徑這一步在你的application中初始化一下緩存路徑,以后的壓縮后的圖片都緩存在這路徑底下
String cache = StorageUtils.getOwnCacheDirectory(this, "Upload/photo").getAbsolutePath(); PictureLibrary.init(this, cache + "/");
緊接著就是使用了,控件執(zhí)行初始化init,之所以還要一次這樣初始化步驟是有項目需求是要編輯已發(fā)送成功的帶圖片的帖子,那些圖也要顯示在選擇圖片控件上,所以有第五個參數(shù),獲取到圖片數(shù)據(jù)的集合后傳進去,就能顯示那些網(wǎng)絡的圖片,這時候可以刪除添加像普通那樣使用了。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);
設置一下回調(diào)方法并實現(xiàn)PictureUploadView.UploadCallBack并重寫兩個方法,添加的回調(diào)和刪除的回調(diào),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,不重寫不會除非上面兩個回調(diào)方法,所以就看不到有圖片添加
@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)像微信的那個圖片選擇控件一樣了,其它上傳回調(diào)的處理參考github里面的demo,有興趣的朋友可以試試,歡迎大家指正。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android實現(xiàn)雙擊TitleBar回頂部的功能示例代碼
一個簡單易用的導航欄TitleBar,可以輕松實現(xiàn)IOS導航欄的各種效果,下面這篇文章主要給大家介紹了關(guān)于Android如何實現(xiàn)雙擊TitleBar回頂部功能的相關(guān)資料,文中給出了詳細的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。2017-09-09詳解Android中的MVP架構(gòu)分解和實現(xiàn)
本篇文章主要介紹了詳解Android中的MVP架構(gòu)分解和實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02Android開發(fā)實現(xiàn)Gallery畫廊效果的方法
這篇文章主要介紹了Android開發(fā)實現(xiàn)Gallery畫廊效果的方法,結(jié)合具體實例形式分析了Android使用Gallery實現(xiàn)畫廊功能的具體操作技巧與相關(guān)注意事項,需要的朋友可以參考下2017-06-06Android動態(tài)顯示當前年月日時分秒系統(tǒng)時間(示例代碼)
這篇文章主要介紹了Android動態(tài)顯示當前年月日時分秒系統(tǒng)時間的示例代碼,需要的朋友可以參考下2017-05-05