从选择到上传,可能是最贴心的高仿朋友圈编辑了
Luban-Circle-Demo
自己要用的上這個,找輪子的時候正巧發(fā)現(xiàn)了一個不錯的圖片壓縮輪子魯班;正巧原repo主用的rxjava,我一直沒有時間點亮這個技能樹,所以把rxjava部分扣掉了;正巧大部分的朋友圈輪子都是討論的顯示列表和多圖選擇器,而沒有一個不錯的編輯頁(包括圖片列表UI和圖片上傳功能),所以把自己的代碼整理了下,開了個輪子方便大家借鑒。
效果圖
Intro
這是一個完整的類似朋友圈的圖片選擇、壓縮、上傳的demo,改改就能拿來用。仿朋友圈按順序上傳圖片至七牛,基于luban算法壓縮修改了luban項目,扣掉rxjava部分,采用線程池,在銷毀時用shutDownNow()即可。
QiniuUtils和ImageCompressUtils分別是上傳至七牛和魯班壓縮的工具類,注釋和todo在代碼中給的非常詳盡,就不再討論了。這里主要來聊聊圖片上傳的順序與用戶選擇的順序一致的問題,這是比較麻煩的一個地方。(代碼格式化好麻煩,請配合ide閱讀)
?
private void post() {//線程不安全,判斷是否壓縮完畢;原始圖片地址-壓縮后文件final Map<String, File> compressedFiles = new HashMap<>();//線程不安全,判斷是否上傳完畢;壓縮后文件-上傳KEYfinal Map<File, String> uploadedKeys = new HashMap<>();。。。。。for (final String imgPath : mImagePathes) {//按照原始圖片順序排序File temp = compressedFiles.get(imgPath);img_urls += uploadedKeys.get(temp) + ",";}?
要正確排序的關(guān)鍵點是用了2個線程不安全的Map來判斷和保存操作結(jié)果。compressedFiles保存的“原始圖片地址-壓縮后文件”鍵值對,uploadedKeys保存的“壓縮后文件-上傳KEY”鍵值對。當(dāng)壓縮、上傳的過程結(jié)束后,編譯原始的圖片地址(這個順序是正確的),從compressedFiles中獲得壓縮后文件的File,然后據(jù)此File從uploadedKeys中獲取七牛返回的key(我上傳服務(wù)器是用逗號隔開一次性把所有圖片地址key都post到服務(wù)器)。
TODO
要完整使用請修改自己的七牛token獲取邏輯,請項目內(nèi)搜索TODO修改。
技能/輪子樹
https://github.com/Curzibn/Luban?圖片壓縮
https://github.com/lovetuzitong/MultiImageSelector?多圖選擇
https://github.com/huijimuhe/monolog-android?網(wǎng)絡(luò)模塊與自定義Recyclerview
https://github.com/litesuits/android-common?線程池與其他utils
Github地址
https://github.com/huijimuhe/Luban-Circle-Demo
轉(zhuǎn)載于:https://www.cnblogs.com/matoo/p/5742253.html
總結(jié)
以上是生活随笔為你收集整理的从选择到上传,可能是最贴心的高仿朋友圈编辑了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2016 Multi-Universit
- 下一篇: 分布式事务XA