android 集结号

Android 图片选择库 MatisseKotin 版

2018-10-23  本文已影响205人  BKQ_SYC

Matisse-kotlin地址

首先感谢:
Matisse核心功能:https://github.com/zhihu/Matisse

裁剪提供者:廖子尧 github地址:https://github.com/jeasonlzy

图片压缩提供者:https://github.com/nanchen2251

Matisse

本项目为知乎原项目kotlin改写版本(2018/9月版本),由于项目纯图片选择库与MatisseUI风格有较大差异,为方便个人使用顺手便对Matisse进行Kotlin翻译,主要对原项目进行部分UI层面改写、已发现bug的修改、新功能添加。
主要修改内容为:

1. 优化相册选择。
2. 优化单选策略。
3. 添加圆形与方形裁剪。
4. 图片选择后压缩,不失真条件下高比率压缩。
5. 增加主题修改,基本可保证定制成与自身项目风格一致
6. 支持设置状态栏颜色 需依赖[ImmersionBar](https://github.com/gyf-dev/ImmersionBar)


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

具体调用查看 SelectionCreator.java

关于打包报错问题:

使用:
1. gradle中添加 implementation 'com.nfleo:MatisseKotlin:1.0.2'
2. AnidroidManifest.xml中添加以下代码

        <activity android:name="com.matisse.ui.view.MatisseActivity" />

        <provider
            android:name="android.support.v4.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. 为适配7.0,,项目manifest的privider标签下 paths文件中添加
    <external-path  name="my_images" path="Pictures"/>
Default Style Other Style Preview Preview
screenshot_default.jpg screenshot_other.jpg screenshot_preview.jpg
Circle Crop Square Crop
screenshot_circlecrop.jpg screenshot_squarecrop.jpg

How do I use Matisse?

com.nfleo:MatisseKotlin:1.0.2

Permission

The library requires two permissions:

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

Simple usage snippet


配置主题

使用套路与原项目一直,只是多增加了一些参数,另外定制时需配置所提供的所有参数。

    <style name="Matisse.Default" parent="Theme.AppCompat.Light.NoActionBar">
        // 状态栏相关
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primary_dark</item>

        // 顶部导航条高度
        <item name="navigation.height">@dimen/navigation_height</item>
        // 顶部导航条背景色
        <item name="navigation.background">@color/navigation_bg</item>
        // 图片预览界面背景色
        <item name="preview.background">@color/preview_bg</item>
        // 顶部导航条返回按钮资源图
        <item name="navigation.backRes">@drawable/icon_arrow_right_white</item>

        // 底部工具栏背景色
        <item name="bottomToolbar.bg">@color/bottomTool_bg</item>
        // 底部工具栏高度
        <item name="bottomToolbar.height">@dimen/bottom_tool_height</item>

        // 返回按钮颜色
        <item name="textColor.Back">@color/text_back</item>
        // 返回按钮文字 当无文字是可设置为空字符串 如下
        <item name="text.Back">@string/button_null</item>
        // 确定按钮颜色
        <item name="textColor.Sure">@color/text_sure</item>
        // 预览按钮颜色
        <item name="textColor.Preview">@color/text_preview</item>
        // 查看全部相册文件夹按钮颜色
        <item name="textColor.Album">@color/text_album</item>
        // 原图选择控件文字颜色
        <item name="textColor.Original">@color/text_original</item>
        // 相册文件夹内部列表item颜色
        <item name="textColor.Item.Album">@color/text_item_album</item>
        // 列表中可拍照状态下相机item文字颜色
        <item name="textColor.Camera">@color/text_camera</item>

        // 返回按钮文字大小
        <item name="textSize.Back">@dimen/text_back</item>
        // 确认按钮文字大小
        <item name="textSize.Sure">@dimen/text_sure</item>
        // 预览按钮文字大小
        <item name="textSize.Preview">@dimen/text_preview</item>
        // 查看全部相册按钮文字大小
        <item name="textSize.Album">@dimen/text_album</item>
        // 原图按钮文字大小
        <item name="textSize.Original">@dimen/text_original</item>
        // 列表中可拍照状态下相机item文字大小
        <item name="textSize.Camera">@dimen/text_camera</item>
        // 查看全部相册内item文字大小
        <item name="textSize.Item.Album">@dimen/text_item_album</item>

        // 选中控件背景色
        <item name="item.checkCircle.backgroundColor">@color/item_checkCircle_backgroundColor</item>
        // 选中控件圆环边框颜色
        <item name="item.checkCircle.borderColor">@color/item_checkCircle_borderColor</item>
        // 原图radio控件颜色
        <item name="item.checkRadio">@color/item_checkRadio</item>

        // 空状态文字颜色
        <item name="empty.textColor">@color/text_empty</item>
        // 空状态文字大小
        <item name="empty.textSize">@dimen/text_empty</item>
        <item name="empty.text">@string/empty_text</item>
        // 空状态资源图
        <item name="empty.resource">@drawable/ic_empty_zhihu</item>

        // 图片加载占位图
        <item name="item.placeholder">@color/zhihu_item_placeholder</item>
    </style>

如需定制UI样式 按需修改,否则使用上述默认主题
Matisse.from(this@MainActivity)
             .setStatusIsDark(true)   // 按需设置状态栏文字颜色
             .theme(R.style.Matisse_Default)    // 设置成所需主题

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)
        .setStatusIsDark(true)            // 设置状态栏文字颜色 需依赖ImmersionBar库
        .imageEngine(new GlideEngine())   // 加载库需外部实现
        .forResult(REQUEST_CODE_CHOOSE);
上一篇下一篇

猜你喜欢

热点阅读