zoukankan      html  css  js  c++  java
  • 从选择到上传,可能是最贴心的高仿朋友圈编辑了

    Luban-Circle-Demo

    自己要用的上这个,找轮子的时候正巧发现了一个不错的图片压缩轮子鲁班;正巧原repo主用的rxjava,我一直没有时间点亮这个技能树,所以把rxjava部分扣掉了;正巧大部分的朋友圈轮子都是讨论的显示列表和多图选择器,而没有一个不错的编辑页(包括图片列表UI和图片上传功能),所以把自己的代码整理了下,开了个轮子方便大家借鉴。


    效果图

    Intro

    这是一个完整的类似朋友圈的图片选择、压缩、上传的demo,改改就能拿来用。仿朋友圈按顺序上传图片至七牛,基于luban算法压缩修改了luban项目,扣掉rxjava部分,采用线程池,在销毁时用shutDownNow()即可。

    QiniuUtils和ImageCompressUtils分别是上传至七牛和鲁班压缩的工具类,注释和todo在代码中给的非常详尽,就不再讨论了。这里主要来聊聊图片上传的顺序与用户选择的顺序一致的问题,这是比较麻烦的一个地方。(代码格式化好麻烦,请配合ide阅读)

    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) + ",";
        }

    要正确排序的关键点是用了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

  • 相关阅读:
    RPC简介
    RabbitMQ从入门到精通
    flask 源码解析:响应
    flask 源码解析:请求
    flask 源码解析:上下文
    flask 源码解析:应用启动流程
    flask 源码解析:路由
    flask源码分析—简介
    11-Docker网络扩展
    10-Docker之Docker-Compose
  • 原文地址:https://www.cnblogs.com/matoo/p/5742253.html
Copyright © 2011-2022 走看看