Matisse-Kotlin

首先感谢: Matisse 核心功能:https://github.com/zhihu/Matisse
裁剪提供者:Yalantis github 地址:https://github.com/Yalantis/uCrop
完整说明文档:Android 图片选择库 MatisseKotlin 版
2020-4-2 (v_2.1.1)
- 修复裁剪结果无法带回问题
2020-4-2
- 修复部分设备 column '_data' does not exist
2020-3-30 注:升级后,旧裁剪无法使用
- 裁剪适配 Android Q,实现为 UCrop 裁剪功能 主要暴露两个开关 isCrop(boolean)、isCircleCrop(boolean)
- 修复部分华为设备图片无法裁剪问题
- 修复预览大概率 ANR 问题
2020-1-18
裁剪适配 Android Q
去除内部压缩-后期将使用接入 Luban 压缩
修改提示方式 setNoticeConsumer { context, noticeType, title, message -> showToast(context, noticeType, title, message) }
修改状态栏处理方法
setStatusBarFuture { params, view -> // 外部设置状态栏 ImmersionBar.with(params)?.run { statusBarDarkFont(true) view?.apply { titleBar(this) } init() } // 外部可隐藏 Matisse 界面中的标题栏 // view?.visibility = if (isDarkStatus) View.VISIBLE else View.GONE }
注意: 单独调用拍照走裁剪时,也需要创建 SelectionCreator
2020-1-17 (v_2.0.5)
- 修复 Gif 图预览崩溃问题
2020-1-14 (v_2.0.5)
- 拍照、展示图片适配 Android Q
2020-1-3 (2.0.3)
- 修复 PreviewPageAdapter 获取资源数组越界
2019-12-30
- 默认关闭内部压缩
- 修复 MatisseActivity 中 albumLoad 空指针异常
- 修复 Item 创建时,部分 cursor 为空问题
- 修复 demo 压缩开关出错问题
2019-12-23
- 修复 Gif 图片类型无法正确判断问题
- 修复部分设备第一次拍照后,拍照结果不显示问题
2019-12-19
- 主题属性命名规范化 见 R.style.CustomMatisseStyle
- MimeTypeManager 类新增 ofMotionlessImage()静态图类型
- Item 列宽(spanSize 和 gridExceptedSize)添加限制,避免过大/过小
- 去除 app_name
- 消除选中闪烁
- 精简压缩库大小 目前 release aar 278k
2019-12-10 (2.0.2)
- 修复 mimeType 为空情况
- 修复 spanSize 和 gridExceptedSize 同时设置冲突 注:同时设置时,读取 gridExceptedSize 值
2019-11-10 (2.0.1)
- 修复裁剪结果尺寸异常
2019-11-4 (2.0)
- 相机单独提取
- 支持默认选中,可传入上次选中的项(通过图片 cursor id 或 uri string 对比) 注:不支持裁剪带回的图片,裁剪带回的图片无 id 和 uri
.setLastChoosePicturesIdOrUri(selectedPathIds as ArrayList<String>?)
- 修复压缩为空带回崩溃
2019-10-29 (1.2.3)
- 修复相册弹窗高度不准确问题
- 支持压缩配置,外部添加开关 api:[isInnerCompress]
- 完善未选中资源时各按钮点击添加提示
- 修复不同设备返回的媒体类型表示不一致(如:JPEG image/jpeg)
- 去除[api setStatusIsDark], 外部处理状态栏,见[api setStatusBarFuture]
2019-10-28 (持续更新 待发布)
- 支持相机拍照完成后多选
- 扩展提示方法,支持使用外部自定义弹窗
- 支持外部处理状态栏,去除项目中原[ImmersionBar]库
.setStatusBarFuture(object : MFunction<BaseActivity> {
override fun accept(params: BaseActivity, view: View?) {
// 外部设置状态栏
ImmersionBar.with(params)?.run {
statusBarDarkFont(isDarkStatus)
view?.apply { titleBar(this) }
init()
}
// 外部可隐藏 Matisse 界面中的 View
view?.visibility = if (isDarkStatus) View.VISIBLE else View.GONE
}
})
- 按官方方式适配 Android Q
2019-10-21 (1.2.2)
- 修复方形裁剪图片变形问题
- 优化单选/多选刷新问题
2019-10-18 (1.2.0)
- 迁移到 androidx
- 修复并支持图片与视频混合选择
设置选择单一类型媒体,示例如下
Matisse.choose(MimeTypeManager.ofAll())
.maxSelectable(3)
或者
Matisse.choose(MimeTypeManager.ofAll(), true)
.maxSelectable(3)
设置选择混合类型媒体,示例如下
Matisse.choose(MimeTypeManager.ofAll(), false)
.maxSelectablePerMediaType(4, 2)
说明:
mediaTypeExclusive true 单一媒体类型选择
读取 maxSelectable 属性作为最大值
mediaTypeExclusive false
读取 maxImageSelectable 和 maxVideoSelectable 属性分别作为最大值
- 修改单/多选逻辑
- 单选支持重新选定,不支持计数方式
- 多选不支持重新选定,选满外部给出提示方式,支持计数与选中方式
- 提示方式外部实现
SelectionCreator.setNoticeEvent( { context: Context, noticeType: Int, title: String, message: String
->
// 外部提示,可外部定义样式
showToast(context, noticeType, title, message)
}
})
2019-10-16
- 完善主题扩展,并提供图片说明
Matisse
本项目为知乎原项目 kotlin 改写版本(2018/9 月版本),由于项目纯图片选择库与MatisseUI 风格有较大差异,为方便个人使用顺手便对Matisse进行 Kotlin 翻译,主要对原项目进行部分 UI 层面改写、已发现 bug 的修改、新功能添加。 主要修改内容为:
1. 优化相册选择。
2. 优化单选策略。
3. 添加圆形与方形裁剪。
4. 图片选择后压缩,不失真条件下高比率压缩。
5. 增加主题修改,基本可保证定制成与自身项目风格一致
6. 支持设置状态栏颜色 需依赖[ImmersionBar](https://github.com/gyf-dev/ImmersionBar)
1.2.2 之后版本去除内部 ImmersionBar 处理
* 注:裁剪成功后只返回裁剪后图片的绝对路径,不返回 Uri,需自行转换
具体调用查看 SelectionCreator.java
关于打包报错问题:
使用:
1. gradle 中添加 implementation 'com.nfleo:MatisseKotlin:2.0.4'
2. AndroidManifest.xml 中添加以下代码
* 注:注意 provider androidx 的差别
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths_public"/>
</provider>
3. 6.0+需处理权限
The library requires two permissions:
- `android.permission.READ_EXTERNAL_STORAGE`
- `android.permission.WRITE_EXTERNAL_STORAGE`
4. 为适配 7.0,,项目 manifest 的 privider 标签下 paths 文件中添加
文件名称为 file_paths_public(名字随意取,但需与 AndroidManifest.xml 中引用保持一致)
<external-path name="my_images" path="Pictures"/>
| Default Style | Other Style Preview | Preview |
|:------------------------------:|:---------------------------------:|:--------------------------------:|
| |  | |
| Circle Crop | Square Crop |
|:------------------------------:|:---------------------------------:|
| |  |
#### Simple usage snippet
------
### 配置主题.
| Media theme | Preview theme |
|:------------------------------:|:---------------------------------:|
| |  |
使用套路与原项目一致,只是多增加了一些参数,另外定制时需配置所提供的所有参数。
使用主题时可直接使用 Matisse.Default, 或者在自己项目中另写 style 继承自 Matisse.Default,修改自己所需属性,如下
app/style.xml
matisse/style.xml