Matisse——Android 图片/视频选择器
来源:互联网 发布:淘宝下单微信全额返现 编辑:程序博客网 时间:2024/05/22 14:35
Matisse 是知乎最近开源的一款 Android 图片/视频选择器。
GitHub地址:https://github.com/zhihu/Matisse
- 可以在 Activity 或者 Fragment 使用
- 可以选择JPEG, PNG, GIF 类型的图片,也支持选择 MPEG, MP4等格式的视频
- 可以应用在不同的主题,包括 Matisse 两套内置主题和自定义主题
- 支持不同的图片加载库,目前支持 Glide 和 Picasso。
- 支持自定义筛选规则
先看下知乎的效果图:
下面我们就开始使用一下Matisse:
1、依赖配置
在bulid.gradle文件中添加依赖:
compile 'com.zhihu.android:matisse:0.5.0-alpha2'
另外这些依赖也要添加(可根据提示添加相应的依赖):
compile 'com.android.support:appcompat-v7:25.3.1'compile 'com.android.support:support-annotations:25.3.1'compile 'com.android.support:recyclerview-v7:25.3.1'compile 'com.android.support:support-v4:25.3.1'
2.添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Android 6.0之后需要动态获取一些涉及隐私的权限(原demo使用的是RxJava获取权限,这里使用了另外一种方式):
/** * android 6.0之后需要动态获取权限 */@TargetApi(23)private void getPersimmions() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { ArrayList<String> permissions = new ArrayList<String>(); /** * 读写权限非必要权限(建议授予)只会申请一次,用户同意或者禁止,只会弹一次 */ if (addPermission(permissions, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { permissionInfo += "Manifest.permission.WRITE_EXTERNAL_STORAGE Deny \n"; } if (addPermission(permissions, Manifest.permission.READ_EXTERNAL_STORAGE)) { permissionInfo += "Manifest.permission.READ_EXTERNAL_STORAGE Deny \n"; } if (permissions.size() > 0) { requestPermissions(permissions.toArray(new String[permissions.size()]), SDK_PERMISSION_REQUEST); } }}@TargetApi(23)private boolean addPermission(ArrayList<String> permissionsList, String permission) { if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) { // 如果应用没有获得对应权限,则添加到列表中,准备批量申请 if (shouldShowRequestPermissionRationale(permission)){ return true; }else{ permissionsList.add(permission); return false; } }else{ return true; }}@TargetApi(23)@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { // TODO Auto-generated method stub super.onRequestPermissionsResult(requestCode, permissions, grantResults);}
3.ProGuard
如果使用Glide作为图片加载开源库
-keep public class * implements com.bumptech.glide.module.GlideModule -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *;} # for DexGuard only -keepresourcexmlelements manifest/application/meta-data@value=GlideModule
如果使用Picasso作为图片加载开源库
-dontwarn com.squareup.okhttp.**
4.代码使用
知乎主题:
Matisse.from(MainActivity.this) .choose(MimeType.ofAll()) .countable(true) .maxSelectable(9) .addFilter(new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K)) .gridExpectedSize(getResources().getDimensionPixelSize(R.dimen.grid_expected_size)) .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) .thumbnailScale(0.85f) .imageEngine(new GlideEngine()) .forResult(REQUEST_CODE_CHOOSE);
Dracula主题:
Matisse.from(MainActivity.this) .choose(MimeType.of(MimeType.JPEG, MimeType.PNG)) .theme(R.style.Matisse_Dracula) .countable(false) .maxSelectable(9) .imageEngine(new PicassoEngine()) .forResult(REQUEST_CODE_CHOOSE);
自定义主题:
Matisse.from(MainActivity.this) .choose(MimeType.ofVideo()) .theme(R.style.Matisse_Custom) .countable(false) .maxSelectable(9) .forResult(REQUEST_CODE_CHOOSE);
需要在colors,styles文件下设置相关的属性。
效果如下:
处理结果:
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_CHOOSE && resultCode == RESULT_OK) { mAdapter.setData(Matisse.obtainResult(data)); }}
5.方法参数解析
choose(Set mimeType): 选择图片、视频类型。支持jpg,jpeg,png,gif ,mpeg, mp4, mov, 3gpp, 3pp2, mkv, webm, ts, avi。
theme(@StyleRes int themeId):设置主题风格。
countable(boolean countable):用于判断是否标记选中项数量。返回true则从 1 开始计数。默认是false。
maxSelectable(int maxSelectable):最大可选中项数
addFilter(Filter filter):添加过滤条件。我们可以通过集成Filter抽象类实现对应的过滤条件来对图片进行筛选,可以添加多个Filter。
例如这里设置了gif类型的图片Filter: new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K):长宽不小于320dpx,且大小不超过 5M 的gif文件。
gridExpectedSize(int size):设置要求展示的图片大小值
thumbnailScale(float scale):图片缩略值。范围在(0.0, 1.0],默认值是0.5。
restrictOrientation(int orientation):设置屏幕方向。横/竖屏 ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
imageEngine(ImageEngine imageEngine):图片加载接口。目前支持GlideEngine,PicassoEngine。(Glide全包含Picasso支持的功能,而且Picasso不支持Gif)
代码中知乎主题下使用的是 GlideEngine ,支持Gif类型的文件。
代码中Dracula主题下使用的是 PicassoEngine ,Picasso不支持Gif类型的文件。
6.类分析
- Matisse——Android 图片/视频选择器
- Matisse Android 图片选择器
- Matisse Android图片选择器详细使用
- android Matisse图片选择器的引入
- Android图片和视频简单选择器
- 高效简洁的android 图片视频选择器
- 图片和视频选择器
- 知乎开源的图片选择器 Matisse 在 6.0 以上手机使用相机功能
- 一个Android图片(视频)选择器:android-media-picker
- Android之附加图片—— 仿微信图片选择器
- android仿微信选择器同时展示视频和图片
- Android——UI篇:Android 图片选择器PictureSelector
- 图片与视频的选择器
- Android图片选择器
- Android 图片选择器
- android图片选择器
- Android图片选择器
- Android 图片选择器
- 观察者模式
- CTF--信息技术对抗赛ISCC之安卓逆向分析
- Android 自定义的Dialog,点击确定按钮,让其根据条件判断消失与否
- Android 7.0调用相机方法
- 链表学习(5)
- Matisse——Android 图片/视频选择器
- POJ 2186 Popular Cows 强连通分量(Kosaraju)
- 程序猿学习第三天,框架和表单
- Android 拖拽ViewDragHelper解析 自定义ViewGroup神器
- Gym
- 咖啡
- HCNA学习笔记(五)ICMP协议
- /etc/fstab 文件解释
- 最大子矩阵和