上一篇文章有說到要在PicSelectAndShow框架中增加選擇本地視頻的操作,因爲最近翻博客看到了LoaderManager的文章,想到了PicSelectAndShow使用的正是這個,所以就抽時間完善了下框架。先來個效果圖:
使用步驟參考PicSelectAndShow圖片選擇框架
調用選擇視頻的代碼也是一行代碼搞定如下:
case R.id.bt_select_video: MultiImageSelector.create().selectVideo(true).start(MainActivity.this,REQUEST_PHOTO_IMAGE); break;
上篇文章好像忘記貼出選擇完代碼怎麼接收結果的示例,這篇補上,不過在GitHub上面有整個完整的項目:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == REQUEST_PHOTO_IMAGE){ if(resultCode == RESULT_OK){ //這個是選擇完圖片和視頻後處理的方法 ArrayList<String> paths=new ArrayList<>(); paths = data.getStringArrayListExtra(MultiImageSelector.EXTRA_RESULT); lstPhotoPath.addAll(paths); adapter=new GridViewAdapter(MainActivity.this,lstPhotoPath,5); grid_show.setAdapter(adapter); } }else if(requestCode==REQUEST_CODE_IMAGE_PATH){ if(resultCode==RESULT_OK){ //這個是上篇文章更新的仿文件管理器選擇地址的回調 image_path=data.getStringExtra(INTENT_EXTRA_IMGPATH); String fileName = System.currentTimeMillis() + ".jpg"; File appDir=new File(image_path); File file1 = new File(appDir, fileName); MultiImageSelector.create().takePhoto(true).registerFile(file1).start(MainActivity.this,REQUEST_PHOTO_IMAGE); } } }
好了,具體的使用代碼已經貼出來了,接下來和大家分享一下具體的實現思路和代碼,首先要說的就是MultiImageSelector這個類,他的作用主要就是對一些具體的操作做了封裝處理,像剛進去的單選,單選不拍照,多選,多選不拍照等,都是一個個的操作,代碼調用的時候只要先獲取到MultiImageSelector的實例,然後調用裏面不同的設置方法就可以實現不同的效果,因爲具體的邏輯處理都已經在MultiImageSelector類裏面做了處理,包括區分單多選,是否拍照,以及選擇完成後的回調等。
接下來就是具體的選擇圖片和視頻的操作了,這部分的處理主要是在MultiImageSelectorFragment中,涉及到的知識點就是文章開始我提到的LoaderManager和CursorLoader,因爲這個知識點有點久遠並且對他介紹的文章也已經多到數不勝數的地步,我就不在這用我那小學語文的水平解釋了,大家想對這塊知識點有更多的瞭解,請移步到大牛的博客,他有對這一系列的來龍去脈以及如何使用做了一個系列的分享。
在做選擇本地視頻的時候有一個問題就是獲取視頻的縮略圖展示,剛開始確實想過直接獲取視頻的縮略圖用來展示這種方法,具體的操作在代碼中可以看到,不過一個問題是獲取到縮略圖後視頻怎麼獲取,以及他們怎麼做到一一對應的關係,好在網上已經有了現成的解決方案,具體實現請參考又一位大牛替我們做好了,有木有發現特簡單。兩種方案實現一種是取到視頻,再獲取第一幀圖片,另一種是直接獲取縮略圖通過id綁定,因爲我原先的邏輯比較簡單,爲了看起來統一,容易理解,果斷放棄了大牛的方案,選擇了一種更爲簡單的操作,相信如果有看我代碼的朋友已經知道了我的實現方法,那就是強大的Glide庫,Glide可以自動讀取到視頻連接的第一幀圖片,是不是瞬間省掉了好多邏輯處理,對於Glide的介紹,去年郭霖大神出過一個系列的文章專門從源碼的角度去分析Glide的實現過程:郭霖的專欄
好了,最後有什麼沒明白的地方,或者使用過程中有什麼bug歡迎各位提出來,咱們一起提高,有木有發現我說的分享思路和代碼基本就是把大家帶到各位大牛的博客,因爲站在巨人的肩上,我們可以發現更多我們平常忽略的東西以及我們沒有接觸過的東西,呵呵,還有一個原因是我的語文表達沒人家好。
最後再次感謝大家的瀏覽,感謝各位大牛的貢獻和分享,灰常感謝!
再來一波廣告:https://github.com/BoBoAndroid/PicSelectAndShow 最新最完整的項目都在這兒了。