在开发Android应用程序的过程中,经常需要使用到图片选择的功能,但是系统自带的图片选择器功能较为单一,不能满足我们更加复杂的需求。为此,网上有很多开源的图片选择库,其中Matisse库是其中备受瞩目的。Matisse库允许你轻松地选取图片、视频、音频文件,支持图片预览、裁剪等操作,使用了MVP和RxJava的设计模式,代码优美简洁,使得图片选择变得更加简单。本文就从各个方面阐述Matisse库的特点和具体实现。
一、引入Matisse库
要使用Matisse库,首先我们需要在项目的build.gradle中加入依赖:
dependencies {
implementation 'com.zhihu.android:matisse:0.5.2-beta3'
}
此外Matisse库同时也依赖了其他一些库,我们还需要在项目的build.gradle中加入以下依赖:
dependencies {
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'io.reactivex.rxjava2:rxjava:2.1.9'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
}
二、使用Matisse库选择图片
使用Matisse库选取图片十分简单,只需要在需要打开图片选择器的Activity中进行如下调用:
Matisse.from(MainActivity.this)
.choose(MimeType.allOf()) // 选择要添加的文件种类,比如图片、视频等
.countable(true) // 显示选择照片的数量
.maxSelectable(9) // 最大选择数量
.gridExpectedSize(getResources().getDimensionPixelSize(R.dimen.grid_expected_size)) // 设置展示缩略图大小
.restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) // 屏幕方向
.thumbnailScale(0.85f) // 缩略图比例
.imageEngine(new GlideEngine()) // 使用哪个图片加载引擎
.forResult(REQUEST_CODE_CHOOSE); // 请求代码
其中GlideEngine是一个用来加载图片的开源库,它需要在app/build.gradle中进行依赖:
dependencies {
implementation 'com.github.bumptech.glide:glide:3.7.0'
}
选择完成后,Matisse库返回给我们的是选中图片的Uri集合,我们可以在onActivityResult方法中进行处理:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_CHOOSE && resultCode == RESULT_OK) {
mSelected = Matisse.obtainResult(data); // 获取选择的图片Uri集合
mAdapter.setData(mSelected); // 将选中的图片显示在RecyclerView上
}
}
三、裁剪图片
除了可以使用Matisse库进行图片选择外,还可以使用它来进行图片的裁剪,只需要在选择图片时加入以下代码:
.choose(MimeType.ofImage()) // 仅选择图片
.showCrop(true) // 开启裁剪功能
.cropOptions(new CropOptions.Builder().setAspectX(1).setAspectY(1).build()) // 裁剪的宽高比例
.maxSelectable(1) // 仅可选一张图片
.forResult(REQUEST_CODE_CHOOSE);
然后在onActivityResult方法中处理裁剪后的图片:
if (requestCode == REQUEST_CODE_CHOOSE && resultCode == RESULT_OK) {
if (Matisse.obtainCropResult(data) != null) {
mSelected = Matisse.obtainCropResult(data); // 获取裁剪后的图片Uri
// 将裁剪后的图片显示在ImageView上
mIvSelected.setImageURI(mSelected.get(0));
}
}
四、自定义主题风格
Matisse库还允许我们自定义选择器的主题风格,只需在styles.xml文件中进行如下定义:
然后在选择图片时使用该主题即可:
Matisse.from(MainActivity.this)
.theme(R.style.MyMatisseTheme) // 使用自定义主题
...
.forResult(REQUEST_CODE_CHOOSE);
五、使用Matisse库实现图片的预览
Matisse库除了提供图片选择和裁剪功能外,还可以帮助我们实现图片的预览,预览会将选择的图片按照顺序显示出来,用户可以滑动图片进行预览。使用Matisse库进行图片的预览十分方便,只需要在选择图片的过程中加入以下代码:
.choose(MimeType.allOf()) // 选择要添加的文件种类,比如图片、视频等
.countable(true) // 显示选择照片的数量
.maxSelectable(9) // 最大选择数量
.gridExpectedSize(getResources().getDimensionPixelSize(R.dimen.grid_expected_size)) // 设置展示缩略图大小
.previewEnable(true) // 开启图片预览
.forResult(REQUEST_CODE_CHOOSE); // 请求代码
然后在onActivityResult方法中处理预览:
if (requestCode == REQUEST_CODE_CHOOSE && resultCode == RESULT_OK) {
if (data != null) {
mSelected = Matisse.obtainResult(data); // 获取选中的图片Uri集合
mAdapter.setData(mSelected); // 将选中的图片显示在RecyclerView上
}
}
六、总结
在本文中,我们详细介绍了如何使用Matisse库来实现Android应用程序的图片选择功能。我们介绍了Matisse库的依赖、使用方法、裁剪图片、自定义主题风格和图片预览等方面。Matisse库是一款使用简单、功能丰富、代码优美的图片选择器,可以很好地解决开发者在开发过程中的图片选择问题。