Android——Matisse图片选择框架
简介
Matisse是知乎开源的图片选择框架:https://github.com/zhihu/Matisse
中文文档:https://blog.csdn.net/qiaoshi96_bk/article/details/76164913
使用:
1. 需要在项目setting.gradle 和 应用build.gradle中实现:
repositories {
jcenter()
}
implementation 'com.zhihu.android:matisse:0.5.3-beta3'
implementation 'com.github.bumptech.glide:glide:4.10.0'
2. 调出图片选择框
Matisse.from(UploadZoneActivity.this) //Activity .choose(MimeType.ofAll()) //选择全部(包括视频) .countable(true) // 有序选择图片 .maxSelectable(9) //最大选择数量为9 .gridExpectedSize(400) //图片显示表格的大小 .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) .thumbnailScale(0.85f) //缩放比率 .theme(R.style.Matisse_Zhihu) //主题 暗色主题 R.style.Matisse_Dracula .imageEngine(new GlideEngine()) //加载方式 .forResult(REQUEST_CODE_CHOOSE); //结果返回码 ,在onActivityResult中获取
3. 获取返回结果(URi)
private ArrayList<Uri> mSelected; @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_CHOOSE && resultCode == RESULT_OK) { mSelected = (ArrayList<Uri>) Matisse.obtainResult(data); Log.d("Matisse", "mSelected: " + mSelected); } }
4. 通过Uri获取真实地址
public static String getRealFilePath(final Context context, final Uri uri ) { if ( null == uri ) return null; final String scheme = uri.getScheme(); String data = null; if ( scheme == null ) data = uri.getPath(); else if ( ContentResolver.SCHEME_FILE.equals( scheme ) ) { data = uri.getPath(); } else if ( ContentResolver.SCHEME_CONTENT.equals( scheme ) ) { Cursor cursor = context.getContentResolver().query( uri, new String[] { MediaStore.Images.ImageColumns.DATA }, null, null, null ); if ( null != cursor ) { if ( cursor.moveToFirst() ) { int index = cursor.getColumnIndex( MediaStore.Images.ImageColumns.DATA ); if ( index > -1 ) { data = cursor.getString( index ); } } cursor.close(); } } return data; }
注意:
1. 对于Android10需要加
android:requestLegacyExternalStorage="true"
2. 需要使用Matisse 时,OnActivityResult()方法,需要判断 resultCode == RESULT_OK 来保证有值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?