图库选择器Matisse的应用
欢迎使用Matisse图库选择器
Matisse是一款精心设计的Android本地图像和视频选择器。您可以
- 在Activity或Fragment中使用它
- 选择包括JPEG,PNG,GIF和视频在内的图像,包括MPEG,MP4
- 应用不同的主题,包括两个内置主题和自定义主题
- 不同的图像加载器
- 自定义过滤规则
添加依赖
repositories {
jcenter()
}
dependencies {
compile 'com.zhihu.android:matisse:$latest_version'
}
添加权限
android.permission.WRITE_EXTERNAL_STORAGE
代码混淆
如果您使用Picasso作为图像引擎,请添加规则:
-dontwarn com.squareup.picasso.**
如果您使用Glide作为图像引擎,请添加规则:
-dontwarn com.bumptech.glide.**
代码应用
/**
* choose是选择的内容,
* showSingleMediaType()是否只显示选择的类型的缩略图,
* capture()是否提供拍照功能
* captureStrategy()存储位置
* countable()是否显示选中数量,
* maxSelectable()最大选择数,
* addFilter()添加一个过滤器,是在我们选择的类型上进一步过滤。
* Filter接口有两个方法,第一个方法返回需要过滤的数据类型,第二个方法决定是否过滤,
* gridExpectedSize()缩略图展示的大小,建议120dp
* thumbnailScale(0.87f)缩略图的清晰程度(与内存占用有关)。
* imageEngine()是我们自定义加载图片框架。
* 过滤的话就return new IncapableCause("过滤的原因"); 填入过滤的原因即可。
* theme主题色,R.style.Matisse_Zhihu (灯光模式),R.style.Matisse_Dracula (暗模式)
* restrictOrientation屏幕方向
* originalEnable是否支持原图
* maxOriginalSize原图大小
* autoHideToolbarOnSingleTap是否自动隐藏Toolbar
*/
Matisse.from(CommonBrowserActivity.this)
.choose(MimeType.ofImage(), true)
.showSingleMediaType(true)
.capture(true)
.captureStrategy(new CaptureStrategy(true, "这里填写配置文件中provider的authorities值", "目录名称"))
.countable(true)
.maxSelectable(9)
.theme("这里可以自定义主题风格")
.addFilter(new Filter() {
@Override
protected Set<MimeType> constraintTypes() {
return new HashSet<MimeType>() {
{
add(MimeType.GIF);
}
};
}
@Override
public IncapableCause filter(Context context, Item item) {
if (!needFiltering(context, item)) {
return null;
} else {
return new IncapableCause(IncapableCause.DIALOG, "暂不支持您选择的图片类型");
}
}
})
.setOnSelectedListener(new OnSelectedListener() {
@Override
public void onSelected(List<Uri> uriList, List<String> pathList) {
}
})
.restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
.thumbnailScale(0.95f)
.imageEngine("图片选择框架默认Glide v3,如果你使用的是Glide v4则需要自己实现")
.forResult("这里填写请求码,用于结果回调");
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
if (requestCode == "这里是你的请求码") {
// 返回结果
List<Uri> list = Matisse.obtainResult(data);
// 具体业务逻辑实现
}
}
}