從選擇到上傳,可能是最貼心的高仿朋友圈編輯了

Luban-Circle-Demo

自己要用的上這個,找輪子的時候正巧發(fā)現了一個不錯的圖片壓縮輪子魯班;正巧原repo主用的rxjava,我一直沒有時間點亮這個技能樹,所以把rxjava部分扣掉了;正巧大部分的朋友圈輪子都是討論的顯示列表和多圖選擇器,而沒有一個不錯的編輯頁(包括圖片列表UI和圖片上傳功能),所以把自己的代碼整理了下,開了個輪子方便大家借鑒。

效果圖

Intro

這是一個完整的類似朋友圈的圖片選擇、壓縮、上傳的demo,改改就能拿來用。仿朋友圈按順序上傳圖片至七牛,基于luban算法壓縮修改了luban項目,扣掉rxjava部分,采用線程池,在銷毀時用shutDownNow()即可。

QiniuUtils和ImageCompressUtils分別是上傳至七牛和魯班壓縮的工具類,注釋和todo在代碼中給的非常詳盡,就不再討論了。這里主要來聊聊圖片上傳的順序與用戶選擇的順序一致的問題,這是比較麻煩的一個地方。(代碼格式化好麻煩,請配合ide閱讀)

<code>

private void post() {
    //線程不安全,判斷是否壓縮完畢;原始圖片地址-壓縮后文件
    final Map<String, File> compressedFiles = new HashMap<>();
    //線程不安全,判斷是否上傳完畢;壓縮后文件-上傳KEY
    final Map<File, String> uploadedKeys = new HashMap<>();

     。。。。。

    for (final String imgPath : mImagePathes) {
        //按照原始圖片順序排序
        File temp = compressedFiles.get(imgPath);
        img_urls += uploadedKeys.get(temp) + ",";
    }

</code>
要正確排序的關鍵點是用了2個線程不安全的Map來判斷和保存操作結果。compressedFiles保存的“原始圖片地址-壓縮后文件”鍵值對,uploadedKeys保存的“壓縮后文件-上傳KEY”鍵值對。當壓縮、上傳的過程結束后,編譯原始的圖片地址(這個順序是正確的),從compressedFiles中獲得壓縮后文件的File,然后據此File從uploadedKeys中獲取七牛返回的key(我上傳服務器是用逗號隔開一次性把所有圖片地址key都post到服務器)。

TODO

要完整使用請修改自己的七牛token獲取邏輯,請項目內搜索TODO修改。

技能/輪子樹

https://github.com/Curzibn/Luban 圖片壓縮

https://github.com/lovetuzitong/MultiImageSelector 多圖選擇

https://github.com/huijimuhe/monolog-android 網絡模塊與自定義Recyclerview

https://github.com/litesuits/android-common 線程池與其他utils

Github地址

https://github.com/huijimuhe/Luban-Circle-Demo

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,319評論 25 708
  • 太長了,還是轉載吧...今天在看博客的時候,無意中發(fā)現了@Trinea在GitHub上的一個項目Android開源...
    龐哈哈哈12138閱讀 20,398評論 3 283
  • 開始輸出 大膽,大膽,再大膽
    plantAtree_dAp閱讀 172評論 6 0
  • 去見你的時候 一路都是紅燈 我的眼里好像有著憂愁 風好大 天也陰了 希望不會下雨 我變了,你也變了
    三希水閱讀 210評論 0 1
  • (在漫長的七個小時的火車旅途中,記錄下自己的所見所聞。) 23點到凌晨2點 剛上火車的的第一個小時,車廂里的人都處...
    墨離c閱讀 376評論 0 0

友情鏈接更多精彩內容