您的位置:

让Android图片选择更简单的Matisse库

让Android图片选择更简单的Matisse库

更新:
在开发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库是一款使用简单、功能丰富、代码优美的图片选择器,可以很好地解决开发者在开发过程中的图片选择问题。
让Android图片选择更简单的Matisse库

在开发Android应用程序的过程中,经常需要使用到图片选择的功能,但是系统自带的图片选择器功能较为单一,不能满足我们更加复杂的需求。为此,网上有很多开源的图片选择库,其中Matisse库是其中备受瞩

2023-12-08
Android图片选择器:轻松解决多图选择和展示问题

在我们的日常开发中,经常有使用多图选择和展示的需求。这个时候,如果没有较好的解决方案,我们需要自己编写大量的代码处理图片的选择和展示,这无疑会增加我们的开发时间和难度。因此,本文将介绍一个Androi

2023-12-08
Android文件选择器——让用户选择文件变得轻松简便

2023-05-22
Android图片旋转:如何让您的图像更具吸引力

2023-05-14
Android图片选择器:快速集成图片选择功能

2023-05-14
让你的应用更加便捷:Android文件选择器

在Android应用的开发中,文件选择器是一个非常常见的功能,让用户可以选择文件进行上传、下载、分享等操作。本文将介绍如何在Android应用中使用文件选择器,以便让你的应用更加便捷。 一、文件选择器

2023-12-08
打造高效Android应用的关键——框架选择

2023-05-14
Android圆形图片

2023-05-19
流畅观看电视的新选择——emby for Android T

在现代的家庭中,电视是不可或缺的娱乐选择之一。然而,想要在电视上流畅高清地观看媒体内容并不容易。随着数字化媒体的普及,人们需要寻找一种跨平台且易用的解决方案来实现家庭媒体的共享。emby for An

2023-12-08
Android App加速加载:使用WebP格式图片

2023-05-14
Android选择器:美化你的应用UI界面

如果你是一位Android开发者,你肯定不希望你的应用UI界面看起来很素洁,毫无美感。因此,为了让你的应用在设计上更加吸引人,在本文中,我们将介绍Android选择器的使用,以在设计上添加颜色和样式。

2023-12-08
让您的Android App滚动得更流畅

2023-05-14
让APP用户选择更方便的方法:Android下拉框控件

2023-05-14
用Picasso轻松实现Android图片加载

2023-05-14
让你的Android应用图片更美观:使用Photoview实

2023-05-14
android的js框架(android js引擎)

本文目录一览: 1、Android真的推荐用MVI模式?MVI和MVVM有什么区别? 2、在Android上怎样实现JAVA和JS交互 3、android 混合开发 用什么框架好 4、Android如

2023-12-08
提高应用性能:优化Android图片加载

一、选择正确的图片格式 在Android应用中,图片是占用较大内存的元素,不同的图片格式对内存的消耗也不同。因此,在使用图片时,选择正确的图片格式,对于优化应用程序的内存非常重要。 PNG、BMP、J

2023-12-08
Android SDK:让开发更高效、更便捷

2023-05-14
Android背景图片设置方法

2023-05-14
Android颜色选择器 - 让用户自定义应用程序颜色选择的

2023-05-14