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<>();//线程不安全,判断是否上传完毕;压缩后文件-上传KEYfinal 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

转载于:https://www.cnblogs.com/matoo/p/5742253.html

从选择到上传,可能是最贴心的高仿朋友圈编辑了相关推荐

  1. android 高仿朋友圈title,Android之高仿微信朋友圈图片上传

    碰到过很多上传图片的功能,大多都是要求是仿微信,不论是单图还是多图,更不知道是出于什么原因要去仿微信,总之,作为开发人员,很无奈,今天就把这种需求总结出来了,方便以后使用,下面就开始撸...... 一 ...

  2. MUI 拍照和从系统相册选择图片上传

    要完成用MUI 拍照和从系统相册选择图片上传的功能,可以理解成有三个功能 1 调用手机相机的功能(可以查看官方API  http://www.html5plus.org/doc/zh_cn/camer ...

  3. 小程序 图片上传php后台,微信小程序图片选择、上传到服务器、预览(PHP)实现实例...

    微信小程序图片选择.上传到服务器.预览(php)实现实例 小程序实现选择图片.预览图片.上传到开发者服务器上 后台使用的tp3.2 图片上传 请求时候的header参考时可以去掉(个人后台验证权限使用 ...

  4. php 点击选择图片上传,微信小程序图片选择、上传到服务器、预览(PHP)实现实例...

    微信小程序图片选择.上传到服务器.预览(PHP)实现实例 小程序实现选择图片.预览图片.上传到开发者服务器上 后台使用的tp3.2 图片上传 请求时候的header参考时可以去掉(个人后台验证权限使用 ...

  5. iOS学习:调用相机,选择图片上传,带预览功能

    iOS学习:调用相机,选择图片上传,带预览功能 发表于2年前(2013-05-30 21:38)   阅读( 18194) | 评论( 16) 27人收藏此文章,我要收藏 赞3 8月22日珠海 OSC ...

  6. wepy小程序聊天记录选择文件上传 wx.chooseMessageFile 带有进度条动画 支持文档打开 完整记录

    #需求:从聊天记录中选择文件,支持的文件格式doc, docx, pdf,同时支持上传的文档打开 文件选择与上传文件后展示模版代码: <van-cell title="从微信聊天记录中 ...

  7. 仿朋友圈相册图片选择以及画廊效果

    仿朋友圈相册图片选择以及画廊效果 1.效果展示 2.导入相关第三方库依赖 3.编写选择图片页面 a.编写布局 b.编写Activity c.相册选择工具类部分代码 d.相册4宫图适配器 4.编写画廊页 ...

  8. php 点击选择图片上传,快速实现PHP图片上传和预览

    用户点击选择文件 选好图片后,自动进行一次提交.完成图片的上传.但不修改原引用图片的地址.后续第二次提交是修改result文件中引用图片的地址(PS:为了简便这里使用了result文件),完成整个上传 ...

  9. html选择文件上传ajax,使用HTML5实现文件上传(ajax方式)以及进度显示

    String path = request.getContextPath(); %> 使用XMLHttpRequest上传文件 var xhr =new XMLHttpRequest(); // ...

最新文章

  1. devc++ 运行时黑屏一闪而过
  2. 杭州获评全国最智慧城市
  3. 专注CTF Pwn的著作终于来了!从此悟透各类漏洞利用技术
  4. 实验二:大数据可视化工具-Tableau
  5. Python3教程--和小名一起学Python
  6. python 排列组合 数据量过大_Python 排列组合的实现
  7. 屏幕尺寸大全和UI设计规范
  8. C++友元和友元函数
  9. Collections.sort()方法对象排序
  10. c语言里编译错误c131,C语言习题选择题.doc
  11. 我沪漂 16 年,再也不打工了!
  12. 针对Mrpt/build中的make时u出现的问题ccache: error: Failed to create temporary file for /home/jyy/.ccache/tmp/tm
  13. webdriver自动化测试工具的使用,将chromedriver配置到path环境变量中,并测试是否成功
  14. 30个HTML+CSS前端开发案例(五)
  15. 关于CSS的一些属性
  16. mongoDB从入门到实战最全小白教程
  17. 《ROS学习之路(1)》ROS Kinetic版本安装---ubuntu16.04(Xenial Xerus 好客的非洲地松鼠)
  18. box-shadow的属性 各种盒子阴影设置
  19. 企业如何建立人才库?
  20. c# linq goup by实例

热门文章

  1. none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
  2. Linux(Ubuntu)下MySQL的安装与配置
  3. BZOJ2819 Nim
  4. richTextBox设置选中的字体属性
  5. [算法] 求环形数组中和值最大子段
  6. Windows Phone 7 Image Controller: Zoom In, Zoom Out, and Rotate (WP 7 图像控制器:放大,缩小,旋转)...
  7. mysql中Bname表示什么_《MY SQL实用教程》期末考试题
  8. linux用户层驱动--VFIO(五)
  9. 电脑桌面路径多了个计算机名,文件太多,电脑桌面太乱?一个技巧帮你解决!...
  10. vue filter对象_学习vue源码(3) 手写Vue.directive、Vue.filter、Vue.component方法