ImagePicker
Introduction: 超强大的图片选择器,支持超大图加载
Tags:
Android-图片选择-超大图加载-效果图
第一张头像模式,第二张选择多张图片(包括动画和顺畅的跳转),第三张是分片加载超大图(19.5M,10000*5000px)
项目介绍请参考
致谢
- subsampling-scale-image-view
- y 总的页面切换动画
如何添加
Gradle
1.在 Project 的 build.gradle 中添加仓库地址
// JitPack 仓库地址
maven { url "https://jitpack.io" }
示例:
allprojects {
repositories {
jcenter()
// JitPack 仓库地址
maven { url "https://jitpack.io" }
}
}
2.在 app 目录下的 build.gradle 中添加依赖
//SImagePicker
compile 'com.github.martin90s:ImagePicker:v1.3.2'
如何使用
1.首先初始化(推荐在 Application 的 oncreate 中调用)
SImagePicker.init(new PickerConfig.Builder().setAppContext(this)
.setImageLoader(new FrescoImageLoader())
.setToolbaseColor(getColor(R.color.colorPrimary))
.build());
2.在需要选择图片的地方调用
SImagePicker
.from(MainActivity.this)
.maxCount(9)
.rowCount(3)
.pickMode(SImagePicker.MODE_IMAGE)
.fileInterceptor(new SingleFileLimitInterceptor())
.forResult(REQUEST_CODE_IMAGE);
可配置项
1.全局配置(即初始化时传入的 PickerConfig,此配置作用于 SImagePicker 整个使用过程)
配置参数 | 参数含义 |
---|---|
setImageLoader(ImageLoader) | 使用的图片加载器。demo 工程中实现了 Fresco 和 Glide 两种 ImageLoader,可以参考 |
setToolbarColor(int) | Picker 的主色调,默认值是 App 的 primaryColor |
setAppContext(Context) | Picker 内部用到的 Context,传入 ApplicationContext 即可 |
2.单次配置(即每次调用 SImagePicker 时传入的参数,此参数只对这次调用生效)
配置参数 | 参数含义 |
---|---|
from(Activity or Fragment) | 调用图片选择器可从 Activity 或者 Fragment 进入,最后的结果会在 onActivityResult()返回,现在返回的结果有两个值,用户选择的图片的路径列表 data.getStringArrayListExtra(PhotoPickerActivity.EXTRA_RESULT_SELECTION);用户是否选择了原图 data.getBooleanExtra(PhotoPickerActivity.EXTRA_RESULT_ORIGINAL, false); |
maxCount(int) | 此次选择允许的最大选择数量,默认是 1.比如发朋友圈最多选择 9 张图就传 9 |
rowCount(int) | 图片列表单排展示多少张图 |
setSelected(List |
默认已经被选中的图片 |
pickMode(int) | 选图的模式,现在有头像模式和普通模式两种,头像模式选中图片后默认会跳到图片裁剪页面且默认只能选择一张 |
cropFilePath(String) | 头像模式下裁剪图片存放地址 |
showCamera(boolen) | 是否要展示拍照入口 |
pickText(int) | Picker 里右下角展示的文字信息(比如配置选择,发送,完成) |
fileInterceptor(FileChooseInterceptor) | 图片过滤器,比如用户选择的单张图片大小有限制,即可写在这个拦截器中,当用户选择过大图片时可以提示并且过滤 |
forResult(int requestCode) | 打开图片选择器,并且传入 requestCode |
获取结果
在调用图片选择器的 Fragment 或者 Activity 中
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CODE_IMAGE) {
final ArrayList<String> pathList =
data.getStringArrayListExtra(PhotoPickerActivity.EXTRA_RESULT_SELECTION);
final boolean original =
data.getBooleanExtra(PhotoPickerActivity.EXTRA_RESULT_ORIGINAL, false);
}
}
TODO
- 增加一个普通模式。由于现在预览为了支持超大图所以选择了 SubsamplingView。后续增加一个不支持超大图的模式,会更加流畅
- Glide 下由于 glide 的缓存策略,跳转动画第一次播放会闪一下,下版修复此问题
联系方式
- 邮箱地址: martinhi2016@gmail.com