先上效果圖,無圖無真相,如果是你需要的,那麼繼續往下看。
下面我將分兩塊給大家講一下怎麼解決的問題。
第一塊就是快速定位問題所在,並解決選擇問題。
第二塊就是按照思路來定位問題,然後給大家11講解解決步驟。畢竟授人魚不如授人以漁
第一塊
1.先去git上下載大神的項目,git地址
https://github.com/LuckSiege/PictureSelector
2.下載完成過後,運行這個demo,爲什麼推薦這個作者的demo?
答:因爲作者已經幫我們實現好了動態添加的效果,不需要我們再去寫一遍,哈哈哈(懶)。
3.找到PictureSelectorActivity文件,在文件中大概866行中添加我框框裏面的代碼即可。
4.代碼如下:
//判斷是否是視頻 方法1。拿到選中的第一個,然後通過系統寫的樣式判斷他的類型。
int pt = PictureMimeType.isPictureType(selectImages.get(0).getPictureType());
if (pt==PictureConfig.TYPE_VIDEO){
Log.d(TAG, "changeImageNumber: 選擇了視頻");
adapter.maxSelectNum=1;
}else if (pt==PictureConfig.TYPE_IMAGE){
Log.d(TAG, "changeImageNumber: 選擇了圖片");
}
5.不出意外的話adapter.maxSelectNum這裏會報錯,因爲adapter設置的是私有,將他改成public即可。
6.好了問題解決了,該幹嘛幹嘛去。如果很懵逼想了解怎麼定位的問題那麼繼續往下來咯。
第二塊
1.先去git上下載大神的項目,git地址
https://github.com/LuckSiege/PictureSelector
2.下載完成過後,運行這個demo,爲什麼推薦這個作者的demo?
答:因爲作者已經幫我們實現好了動態添加的效果,不需要我們再去寫一遍,哈哈哈(懶)。
3.博主bb
大家可能覺得別人的git你拿出來發博客,怕是**吧,但是大家仔細看看當前項目的調用,是不是隻有有個最大選擇數量,而沒有單獨的視頻選擇多少和圖片又選擇多少。而我改動部分源碼就是爲了這個效果,而且這個項目真的很完美了,我在錦上添花應該還是可以滿足部分做社交朋友的需求吧。廢話不多說了開始說正事了。
4.定位問題
第一步我們先要判斷用戶選擇的是圖片還是視頻,這很關鍵,不然我們就沒辦法做後續的工作了,鄙人經過1天的摸索(主要是菜)定位了哪裏判斷是否選中。我先不說定位的位置,大家可以先按照我的思路嘗試一下解決問題,既然要判斷選中那麼我們先打開作者的demo點擊添加,添加前和添加後是不是又變化,先上圖看看,這是沒選擇時和選擇後兩張圖:
應該不難看出右下角發現了明顯的變化,比如字變了呀0.0.。那好就從這個地方下手,先找到這個佈局文件然後找到他的activity,上面也提到了是PictureSelectorActivity。定位了activity後,我們就在這個裏面找文字更改的地方,跟着textview的id找一會兒就能找到,用ctrl+f,搜索即可。發現他在方法這個方法裏如圖:
好了找了他過後
picture_tv_ok.setText(getString(R.string.picture_completed));
就在這段代碼的上面或者下面做操作,別出了if的判斷語句就行。
5.判斷視頻、音頻、圖片
既然知道了用戶選擇的觸發事件地點,那麼就要判斷選擇的到底是視頻還是圖片啊,博主這個榆木腦袋想了很久和嘗試,總算偶然機會發現了怎麼判斷前後總結了兩個方法(最終採取了第二個方法)。
方法1:在選中這個方法裏面,大家有沒有注意到方法裏的參數如圖
其實這個參數裏面就是我們要解決的問題所在,比如他有一個獲取路徑方法如圖:
當時想的就是先將路徑拿到然後根據文件的後綴名來判斷是否是視頻或者圖片。
既然要判斷類型,那麼第一個選擇就很重要了,還是回到選中的這個方法裏面來。第一個選擇也就是這個List集合的下標爲0,那麼判斷路徑的代碼就是:
selectImages.get(0).getPath());
記得寫在picture_tv_ok.setText(getString(R.string.picture_completed));的前面或者後面。然後通過log打印一下日誌,你就會發現每次選中都會有你第一次選中的路徑。如圖:
第一個方法就這樣,主要是通過後綴名來判斷用戶選擇的是圖片還是視頻,然後在對其進行選擇數量的更改,選擇數量在後面在提到。
方法2:在實現第一個方法的時候,因爲博主懶,沒錯是懶,記得之前在查看怎麼判斷視頻和圖片的時候git作者好像已經爲我們寫好了,然後就當然拿過來用啦。
在PictureMimeType.java文件裏面有個isPictureType方法,他就是用來判斷選擇的類型的,如圖:
返回值就代表着選中的類型,這裏有圖片、視頻和音頻的判斷。
那麼我們現在就可以開始使用啦,判斷第一個選中的到底是什麼類型來進行操作。代碼如下:
//判斷是否是視頻 方法1。拿到選中的第一個,然後通過系統寫的樣式判斷他的類型。
int pt = PictureMimeType.isPictureType(selectImages.get(0).getPictureType());
if (pt==PictureConfig.TYPE_VIDEO){
Log.d(TAG, "changeImageNumber: 選擇了視頻");
}else if (pt==PictureConfig.TYPE_IMAGE){
Log.d(TAG, "changeImageNumber: 選擇了圖片");
}
通過log打印一邊你就知道是不是對的咯。
6.單獨的給圖片和視頻設置最大的選擇數量
現在既然定位也做了,也判斷了類型,還差的就是單獨的設置選中的數量,這個博主實踐了半天都tm不行啊,畢竟如假包換的榆木腦殼可不是蓋的。我看了MainActivity裏面的調用,發現最後還是adpater裏面有個方法入:
adapter.setSelectMax(maxSelectNum);
這裏纔是真正用來設置選中的數量的,然後開心的跑到PictureSelectorActivity文件裏面也發現了一個adpater,哈哈哈沒笑過3秒,發現不是同一個adpater。然後就點進去該adapter看發現裏面其實也是有一個最大選擇數量,如圖:
只能在這裏下文章了,現在他是私有的,要想在PictureSelectorActivity裏面調用他,那麼先的將他設置爲public才行。設置完成過後,就拿去調用了。比如我現在視頻想選擇1個,圖片想選擇4張,那麼下面代碼就可以解決:
//判斷是否是視頻 方法1。拿到選中的第一個,然後通過系統寫的樣式判斷他的類型。
int pt = PictureMimeType.isPictureType(selectImages.get(0).getPictureType());
if (pt==PictureConfig.TYPE_VIDEO){
Log.d(TAG, "changeImageNumber: 選擇了視頻");
adapter.maxSelectNum=1;
}else if (pt==PictureConfig.TYPE_IMAGE){
Log.d(TAG, "changeImageNumber: 選擇了圖片");
adapter.maxSelectNum=4;
}
在該框架的調用過程中是可以動態的設置最大數量的,如:
所以說想如果只想單獨改視頻的選擇數量,那就在視頻類型中用adapter.maxSelectNum即可,而圖片就可以直接在框架裏面改就行。
總結:通過定位問題的位置,然後再到類型的判斷,最後在對不同的類型就行不同的處理即可。
如果您覺得這篇文章對您有用!那不妨請博主喝杯可樂可好!