Android开发之高仿微信图片选择器
记得刚开始做Andriod项目那会,经常会碰到一些上传图片的功能需求,特别是社交类的app,比如用户头像,说说配图,商品配图等功能都需要让我们到系统相册去选取图片,但官方却没有提供可以选取多张图片的相关API,所以那时候会到Github上去找找相关的开源库,也觉得挺方便的,但随着后来Android系统的更新,带来了很多新特性和API的改变,比如从Android6.0后的动态权限申请,7.0的私有目录权限以及一些API的废弃(Uri.fromFile等),但所用的开源库作者又没有很及时的去更新适配,又或者一些开源库直接在库中引入了图片加载框架,导致项目中存在多个图片加载框架,这样就造成了包体积的增大和方法数的增加,导致项目中或多或少会出现一些问题,所以那时萌生了想自己写一个图片选择器,尽可能的做到简洁,速度快,然后一个图片选择器的库就这么诞生了:ImagePicker图片加载器
实现效果图:




相比1.0.+版本,2.0版本进行了代码的大块重构,注重模块间的代码解耦,简化了配置,将兼容Android7.0所需要的FileProvider下沉到库中完成,不再需要开发者配置,并对GIF图,视频,大图预览等功能有了支持。
1、如何在项目中引入该图片加载库:
//gradle版本在3.0以下引入此行
compile 'com.lcw.library:imagepicker:2.1.2'
//gradle版本在3.0以上引入此行
implementation 'com.lcw.library:imagepicker:2.1.2'
2、一行代码调用:
ImagePicker.getInstance()
.setTitle("标题")//设置标题
.showCamera(true)//设置是否显示拍照按钮
.showImage(true)//设置是否展示图片
.showVideo(true)//设置是否展示视频
.setMaxCount(9)//设置最大选择图片数目(默认为1,单选)
.setImagePaths(mImageList)//保存上一次选择图片的状态,如果不需要可以忽略
.setImageLoader(new GlideLoader())//设置自定义图片加载器
.start(MainActivity.this, REQUEST_SELECT_IMAGES_CODE);//REQEST_SELECT_IMAGES_CODE为Intent调用的requestCode
3、如何获取选中的图片集合:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_SELECT_IMAGES_CODE && resultCode == RESULT_OK) {
List<String> imagePaths = data.getStringArrayListExtra(ImagePicker.EXTRA_SELECT_IMAGES);
}
}
4、如何自定义图片加载器(不定死框架,让框架更加灵活,需要去实现ImageLoader接口即可):
public class GlideLoader implements ImageLoader {
//to do something 可以参考Demo用法
}
写在最后:
这个库会持续维护下去,后续会把大图预览,裁剪等功能添加进去,遵循极简的原则,把库做的尽可能的小,欢迎大家提建议,更加具体的使用请参考下面源码中的Demo演示~
版本更新里程碑:
Version1.0.0:
1、可预览各文件夹下的图片
2、可配置是否支持相机拍照
3、可配置选择图片模式(单选/多选)
4、可配置选择图片数量 5、可配置图片加载框架
Version1.1.0:
1、新增大图预览功能(初步实现,考虑性能后期会改为Fragment承载,单一Activity架构)
2、更改选择图片文件夹弹窗高度
3、更改ImageLoader接口,开放小图加载、大图加载、清除缓存方法
Version2.0.0:
1、重构了大量的代码,更加注重代码间的解耦,相比1.0版本简化了配置项(下沉FileProvider),让开发者可以更专注于业务。
2、添加媒体库扫描对GIF、视频的支持,并开放接口让开发者自行实现视频播放逻辑。
3、添加媒体库加载策略,开发者可自行配置加载图片或者视频,灵活运用于不同业务实现。
4、完善大图预览功能,完善部分UI界面的显示。
源码下载:
这里附上源码地址(欢迎Star,欢迎Fork):ImagePicker
Android开发之高仿微信图片选择器的更多相关文章
- Android开发技巧——定制仿微信图片裁剪控件
拍照--裁剪,或者是选择图片--裁剪,是我们设置头像或上传图片时经常需要的一组操作.上篇讲了Camera的使用,这篇讲一下我对图片裁剪的实现. 背景 下面的需求都来自产品. 裁剪图片要像微信那样,拖动 ...
- Android 高级UI设计笔记06:仿微信图片选择器(转载)
仿微信图片选择器: 一.项目整体分析: 1. Android加载图片的3个目标: (1)尽可能的去避免内存溢出. a. 根据图片的显示大小去压缩图片 b. 使用缓存对我们图片进行管理(LruCache ...
- [转]Android 超高仿微信图片选择器 图片该这么加载
快速加载本地图片缩略图的方法: 原文地址:Android 超高仿微信图片选择器 图片该这么加载 其示例代码下载: 仿微信图片选择器 ImageLoader
- Android 超高仿微信图片选择器 图片该这么加载
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39943731,本文出自:[张鸿洋的博客] 1.概述 关于手机图片加载器,在当今像 ...
- Android 超高仿微信图片选择器 图片该这么载入
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39943731,本文出自:[张鸿洋的博客] 1.概述 关于手机图片载入器,在当今像 ...
- android之使用GridView+仿微信图片上传功能
由于工作要求最近在使用GridView完成图片的批量上传功能,我的例子当中包含仿微信图片上传.拍照.本地选择.相片裁剪等功能,如果有需要的朋友可以看一下,希望我的实际经验能对您有所帮助. 直接上图,下 ...
- Android高仿微信图片选择功能的PhotoPicker
类似于微信修改头像的功能基本上每个app都会有,以前公司开发的项目就有修改头像的功能,但是用的Android系统自带的图片选择器.用Android系统的图片选择器有个好处就是稳定,不会有什么问题.但也 ...
- Android之仿微信图片选择器
先上效果图.第一张图显示的是“相机”文件夹中的所有图片:通过点击多张图片可以到第二张图所示的效果(被选择的图片会变暗,同时选择按钮变亮):点击最下面的那一栏可以到第三张图所示的效果(显示手机中所有包含 ...
- Android -- 真正的 高仿微信 打开网页的进度条效果
(本博客为原创,http://www.cnblogs.com/linguanh/) 目录: 一,为什么说是真正的高仿? 二,为什么要搞缓慢效果? 三,我的实现思路 四,代码,内含注释 五,使用方法与截 ...
随机推荐
- scala 中的集合类
集合最重要的继承路线 —— Traversable -> Iterable -> Seq -> LinerSeq -> List Traversable 中的公有方法: 分类 ...
- 开启idea自动Build功能
修改Intellij IDEA的配置两步:1.setting -> Compile -> Build project automatically --> 选中 2.CTRL + SH ...
- mysql wait_timeout interactive_timeout 详解
查看mysql server超时时间: msyql> show global variables like '%timeout%'; 设置mysql server超时时间(以秒为单位): 最小设 ...
- oracle数据库锁表
在团队开发一个项目的时候,避免不了两个或两个以上的人同时操作某一数据库中的同一张表,这时候,如果一个用户没有提交事务,或者忘记提交事务,那么其他用户就不能对这张表进行操作了,这是很烦人的事情,下面是查 ...
- nmap 排除某端口进行扫描
--exclude-ports (Exclude the specified ports from scanning) https://nmap.org/book/man-port-specifica ...
- LA 3704细胞自动机——循环矩阵&&矩阵快速幂
题目 一个细胞自动机包含 $n$ 个格子,每个格子的取值为 $0 \sim m-1$.给定距离 $d$,则每次操作是将每个格子的值变为到它的距离不超过 $d$ 的所有格子的在操作之前的值的和除以 $m ...
- 计算 byte[] 转 int modebus 指定位数 获取值 使用
计算 byte[] 转 int modebus 指定位数 获取值 使用 if (bytetores.Length > 6) { int total = 0; for (int i = 0; i ...
- web之大文件断点续传
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
- learning java Random 和 ThreadLocalRandom类
var rand = new Random(); System.out.println(rand.nextBoolean()); System.out.println(rand.nextInt()); ...
- 《挑战30天C++入门极限》新手入门:关于C++中的内联函数(inline)
新手入门:关于C++中的内联函数(inline) 在c++中,为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数. 可能说到这里,很 ...