知乎开源的图片选择库

来源:互联网 发布:科密xc 55a数据库安装 编辑:程序博客网 时间:2024/06/01 08:48

转载自:http://www.jianshu.com/p/382346bf0aa9

前言

在实际开发中,图片选择器一直都是必不可少的一个部分,不管是 QQ 头像的设置,还是发送一条装逼的微信朋友圈,都要用到图片选择器来给用户选择他们想要上传的图片,最近知乎开源了一款图片选择库 Matisse 简直美哭了,而且完全遵循 Android 交互设计规范,实在是很良心。

在开始正文之前,先欣赏一下这个图片选择器的效果



Matisse

是不是感觉相当的简洁好看,反正我是这么认为的。

一、基本使用


1、导入相应的依赖库

Gradle:

repositories {    jcenter()}dependencies {    compile 'com.zhihu.android:matisse:0.4.3'}

有一点要注意一下, 这个图片选择库是使用 Glide 或 Picasso 作为图片加载引擎

如果你使用 Glide 作为你的图片加载引擎,请添加 Glide 的 README 上所说的规则,以及添加额外的规则:

-dontwarn com.squareup.picasso.**

如果你使用 Picasso 作为你的图片加载引擎,请添加 Picasso 的 README 上所说的规则,以及添加额外的规则:

-dontwarn com.bumptech.glide.**

2、启动 Matisse

在正式写代码之前,有两个相关的权限需要先申请:

android.permission.READ_EXTERNAL_STORAGEandroid.permission.WRITE_EXTERNAL_STORAGE

所以,如果你的 APP 是跑在 Android 6.0+ 的话,你需要在下个步骤之前处理一下运行时权限。

我们可以在平常的 Activity 或 Fragment 中启动 MatisseActivity

Matisse.from(MainActivity.this)        .choose(MimeType.ofAll(), false) // 选择 mime 的类型        .countable(true)        .maxSelectable(9) // 图片选择的最多数量        .gridExpectedSize(getResources().getDimensionPixelSize(R.dimen.grid_expected_size))        .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)        .thumbnailScale(0.85f) // 缩略图的比例        .imageEngine(new GlideEngine()) // 使用的图片加载引擎        .forResult(REQUEST_CODE_CHOOSE); // 设置作为标记的请求码

3、接收选择的结果

在启动图片选择器的 Activity 或 Fragment 中的 onActivityResult() 进行结果的回调处理

List<Uri> mSelected;@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (requestCode == REQUEST_CODE_CHOOSE && resultCode == RESULT_OK) {        mSelected = Matisse.obtainResult(data);        Log.d("Matisse", "mSelected: " + mSelected);    }}

二、常用的 API


Mime 类型

Matisse 支持以下的 mime 类型

Mime typeFile extensionsMedia typeimage/jpegjpg, jpegimageimage/pngpngimageimage/gifgifimageimagex-ms-bmpbmpimagevideo/mpegmpeg, mpgvideovideo/mp4mp4, m4vvideovideo/quicktimemovvideovideo/3gpp3gp, 3gppvideovideo/3gpp23g2, 3gpp2videovideo/x-matroskamkvvideovideo/webmwebmvideovideo/mp2tstsvideovideo/aviavivideo

默认情况下,所有的图像和视频都将显示在 Matisse 中,你不能通过以下方法来限制可选择的 mime 类型:

  • MimeType.ofAll()
  • MimeType.of(MimeType type, MimeType... rest)
  • MimeType.ofImage()
  • MimeType.ofVideo()

你可以让 Matisse 只显示一种媒体类型,如果

  • 启动的时候,调用 showSingleMediaType(true)
  • 只选择图片或者视频

数量


默认情况
在缩略图的右上角有一个复选标记,让你不仅可以选择一个图像

自动增长的数目
使用 countable(true) 来显示一个从 1 开始的数字

最大的数字数量
使用 maxSelectable(int maxSelectable) 来限制可选择的最大数目

方向


使用 restrictOrientation*(@ScreenOrientation int orientation) 来设置图像选择和预览活动所需的方向。

网格的规格


如果你想要固定的跨度计数,请使用 spanCount(int spanCount),当方向更改时,范围计数将保持不变。

如果希望可以灵活地适应不同屏幕的网格大小,请使用 spanCount(int spanCount),该值不一定被应用,因为图片网格应该填满视图容器。测量的图片网格的大小将尽可能接近该值。

缩略图缩放


使用 thumnailScale(float scale) 来设置缩略图位图相对于视图大小的缩放比例,而且它应该是(0.0,1.0)中的浮点值。

三、主题


内置的主题

在 Matisse 中有两种内置的主题:

  • Zhihu(亮蓝色主题)
  • Dracula(黑色主题)

当启动 Matisse 的时候,调用 theme(@styleRes int themeId) 方法来使用其中一种主题

Matisse.from(MainActivity.this)    ...    .theme(R.style.Matisse_Zhihu | R.style.Matisse_Dracula)    .forResult(REQUEST_CODE_CHOOSE);

自定义主题

从两个内置主题,甚至是他们的父母派生自定义主题,你可以自定义 Matisse 的外观

这些属性(在 attrs.xml 中定义)可以修改:

属性作用colorPrimary应用栏的颜色colorPrimaryDark状态栏的较暗变体toolbar: toolbartoolbar 的风格album.dropdown.title.color专辑名称下的专辑中的下拉列表中的颜色album.dropdown.count.color工具栏元素的颜色,元素包括导航图标,所选的相册标题和右侧的下拉箭头图标album.thumbnail.placeholder相册缩略图的占位符album.emptyView绘制图片的空视图album.emptyView.textColor空白视图的文字颜色item.placeholder媒体网格的占位符颜色或 drawablepage.bgActivity 或 Fragment 页面的背景颜色或 drawablebottomToolbar.preview.textColor底部工具栏的背景颜色或 drawablebottomToolbar.apply.textColor预览按钮文本的底部工具栏上的颜色listPopupWindwoStyle专辑列表的下拉菜单样式capture.textColor可能出现在顶部的捕获网格的文本颜色
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 两岁宝宝牙齿上有黑渍怎么办 两岁宝宝牙齿发黑怎么办 求帮助宝宝刷牙不会漱口怎么办 牙膏不小心吞了怎么办 宝宝误吃了牙膏怎么办 宝宝吃了30g牙膏怎么办 孩子把牙膏吞了怎么办 二岁宝宝有蛀牙怎么办 3岁宝宝有蛀牙了怎么办 三岁宝宝夜惊怎么办 小班孩子跳舞不好好跳怎么办 15个月宝宝拉稀怎么办 孩子学习不认真该怎么办 孩子学习不自觉该怎么办 孩子学习压力大该怎么办 分手发信息不回怎么办 两岁宝宝不会回答问题怎么办 分手了我还想他怎么办 两岁宝宝特别不听话怎么办 2岁宝宝争东西怎么办 两岁宝宝钙吸收不好怎么办 1岁宝宝害羞胆小怎么办 2岁宝宝害羞胆小怎么办 6个月的宝宝胆小怎么办 3岁半宝宝很胆小怎么办 分手了想他了怎么办 分手了还想联系怎么办 2岁多宝宝不长肉怎么办 2个月宝宝尿裤子怎么办 四岁宝宝脾气大怎么办 两周宝宝换奶粉怎么办 两周半宝宝不喝奶粉怎么办 2岁半宝宝太调皮怎么办 2岁宝宝晚上睡觉晚怎么办 三周岁半宝宝入园后不合群怎么办 数学懒于思考的孩子怎么办 2岁宝宝爱哭不讲道理怎么办 孩子不讲道理一直哭怎么办 白天不烧晚上烧怎么办 两岁宝宝出虚汗怎么办 两岁宝宝出水痘怎么办