美文网首页android 集结号
Android 图片选择库 MatisseKotin 版

Android 图片选择库 MatisseKotin 版

作者: BKQ_SYC | 来源:发表于2018-10-23 16:30 被阅读205次

    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:

    • 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


    配置主题

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

        <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);
    

    相关文章

      网友评论

        本文标题:Android 图片选择库 MatisseKotin 版

        本文链接:https://www.haomeiwen.com/subject/ftcazftx.html