Matisse

Project Url: NFLeo/Matisse
Introduction: 改自知乎原项目, 优化相册选择,优化单选,添加裁剪,选择图片后添加图片压缩
More: Author   ReportBugs   
Tags:

Image

Matisse

本项目在原项目上修改(2018/5 月版本) 主要修改内容为:

1. 优化相册选择。
2. 优化单选策略。
3. 添加圆形与方形裁剪。  单图模式(maxSelectable == 1)才支持裁剪
4. 图片选择后压缩,不失真条件下高比率压缩。

* 注:裁剪成功后只返回裁剪后图片的绝对路径,不返回 Uri,需自行转换

具体调用查看 SelectionCreator.java

关于打包报错问题:

使用:
1. 复制 matisse 依赖包
2. 为适配 7.0,,项目 manifest 的 privider 标签下 paths 文件中添加
    <external-path  name="my_images" path="Pictures"/>


主项目 gradle 中 android 目录下添加

    lintOptions{
        disable 'MissingTranslation'
    }

2018-05-08 修改内容: 同步添加选中回调、选中原图功能

2018-02-07 修改内容: 处理打包报错问题,删除多余语言支持

2017-11-29 修改内容: 同步更新( 11 月 23 日前) 官方版本优化内容

2017-10-19 修改内容: 裁剪框尺寸与屏幕尺寸关联,修复小手机裁剪框出界

2017-10-12 修改内容: 图片选择成功后压缩,只对图片进行压缩,多张压缩只需循环执行

2017-10-11 修改内容: 解决选择视频时裁剪崩溃

2017-7-26 修改内容: 修复方形裁剪无法拍照

Build Status
Matisse is a well-designed local image and video selector for Android. You can

  • Use it in Activity or Fragment
  • Select images including JPEG, PNG, GIF and videos including MPEG, MP4
  • Apply different themes, including two built-in themes and custom themes
  • Different image loaders
  • Define custom filter rules
  • More to find out yourself
Zhihu Style Dracula Style Preview
Circle Crop Square Crop

Check out Matisse releases to see more unstable versions. And add extra rule:

-dontwarn com.bumptech.glide.**

How do I use Matisse?

Permission

The library requires two permissions:

  • android.permission.READ_EXTERNAL_STORAGE
  • android.permission.WRITE_EXTERNAL_STORAGE

So if you are targeting Android 6.0+, you need to handle runtime permission request before next step.

Simple usage snippet


Start MatisseActivity from current Activity or Fragment:

Matisse.from(MainActivity.this)
        .choose(MimeType.allOf())
        .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_UNSPECIFIED)
        .thumbnailScale(0.85f)
        .imageEngine(new GlideEngine())
        .forResult(REQUEST_CODE_CHOOSE);

Matisse.from(SampleActivity.this)
        .choose(MimeType.ofAll(), false)      // 展示所有类型文件(图片 视频 gif)
        .capture(true)                        // 可拍照
        .countable(true)                      // 记录文件选择顺序
        .captureStrategy(new CaptureStrategy(true, "cache path"))
        .maxSelectable(1)                     // 最多选择一张
        .isCrop(true)                         // 开启裁剪
        .cropOutPutX(400)                     // 设置裁剪后保存图片的宽高
        .cropOutPutY(400)                     // 设置裁剪后保存图片的宽高
        .cropStyle(CropImageView.Style.RECTANGLE)   // 方形裁剪 CIRCLE 为圆形裁剪
        .isCropSaveRectangle(true)                  // 裁剪后保存方形(只对圆形裁剪有效)
        .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.8f)
        .imageEngine(new GlideEngine())
        .forResult(REQUEST_CODE_CHOOSE);
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools