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/) 目录: 一,为什么说是真正的高仿? 二,为什么要搞缓慢效果? 三,我的实现思路 四,代码,内含注释 五,使用方法与截 ...
随机推荐
- CH5E26 扑克牌
题意 5E26 扑克牌 0x5E「动态规划」练习 描述 一副不含王的扑克牌由52张牌组成,由红桃.黑桃.梅花.方块4组牌组成,每组13张不同的面值.现在给定52 张牌中的若干张,请计算将它们排成一列, ...
- 表述数据的手段——json
一.JSON 语法规则 在 JS 语言中,一切都是对象.因此,任何支持的类型都可以通过 JSON 来表示,例如字符串.数字.对象.数组等.但是对象和数组是比较特殊且常用的两种类型: 对象表示为键值对 ...
- 洛谷 P1257 平面上的最接近点对 题解
P1257 平面上的最接近点对 题目描述 给定平面上n个点,找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的. 输入格式 第一行:n:2≤n≤10000 接下来n行:每行两 ...
- LibreOJ #6191. 「美团 CodeM 复赛」配对游戏
二次联通门 : LibreOJ #6191. 「美团 CodeM 复赛」配对游戏 /* LibreOJ #6191. 「美团 CodeM 复赛」配对游戏 概率dp */ #include <cs ...
- 数组不能用for each ,
数组不能用for each 不能用这 for(String xkz:xkzzj){ SjshdcDTO sjshdcDTO = cpcyService.findSjshdcDTOById(xkz); ...
- GO语言Error处理
Go语言没有提供像Java.C#.Python语言中的try...catch异常处理方式,而是通过函数返回值逐层往上抛.好处就是避免漏掉本应处理的错误.坏处是代码啰嗦. 错误与异常区别 错误指的是可能 ...
- VsCode插件与Node.js交互通信
首先关于VsCode插件通信,如果不明白的可以参考我的这篇博客VsCode插件开发之插件初步通信 如果需要详细例子的话,可以参考VsCode插件开发 现在又有一个新的需求是,VsCode插件可以通过j ...
- 【多线程与并发】Java中的12个原子操作类
从JDK1.5开始,Java提供了java.util.concurrent.atomic包,该包中的原子操作类提供了一种使用简单.性能高效(使用CAS操作,无需加锁).线程安全地更新一个变量的方式. ...
- python3+requests get/post 请求
1.get请求 (1)没有请求参数类型 1 response = requests.get(url='') 2 print(response.text) (2)有请求参数的类型(键值对形式表示参数) ...
- eclipse如何配置tomcat
依次点击Window->Show View->Other 找到Server,点击OK,看到控制台旁边已有Server了. 点击server下面的链接,依次选择Apache,根据自己 ...