博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Charles - Android 多媒体文件选择器
阅读量:7222 次
发布时间:2019-06-29

本文共 1531 字,大约阅读时间需要 5 分钟。

hot3.png

Charles - Android 多媒体文件选择器

首先祝大家小年好!

由于在毕业设计中需要用到文件选择器, 使用系统的文件选择器则面临着 UI 界面不统一的问题, 所以干脆自己写一个好了, 于是就有了这个项目 - . 实际上, Charles 并不能算作是一个文件选择器, 而是一个多媒体选择器, 因为 Charles 并不支持直接通过路径访问特定文件. 好了, 废话不多说, 先看图:

是的, 正如你所见, Charles 和 开源的 非常的相似. 实际上, Charles 参考了 Matisse 的 UI, 并在代码上有做参考, 在此向知乎团队表示感谢并献上我的膝盖?(关于 Matisse, 你可以参考这篇文章 ).

我们来看看 Charles 应该如何使用:

Charles.from(this@MainActivity)        .choose()        .maxSelectable(9)        .progressRate(true)        .theme(R.style.Charles)        .imageEngine(GlideEngine())        .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)        .forResult(REQUEST_CODE_CHOOSE)

从代码和上面的截图中可以发现, Charles 是支持主题的. Charles 的特性并不仅仅如此, 使用 Charles, 你可以:

  • 直接在 Activity 或者 Fragment 中调用;
  • 选择多种媒体文件, 包括图片, 视频, 音频和文件;
  • 应用不同的主题, 其中 Charles 内置了两套 theme: 日间模式(Charles)和夜间模式(CharlesDark). 如果这两套主题不符合你的需求, 你仍然可以自定义主题;
  • 指定最大可选数量;
  • 支持横竖屏. Charles 内部实现了状态保存, 因此 Configuration 的变化并不会对 Charles 带来不利的影响;
  • 支持多种图片加载库. Charles 内部提供了两种图片加载引擎: 和 . 当然, 如果以上两种都不是你所需要的, 你还可以自定义图片加载引擎, 只需要实现一个接口就好了. Charles 目前并不支持 .

在 Charles 的内部, 采用了 Matisse 使用的 Loader 作为 多媒体文件的加载器. 如果你对 Loader 感兴趣, 可以参考. Charles 内部并没有使用 MVP 或者 MVVM 等 MV* 实现解耦, 而且也没有采用过多的第三方库(实际上只依赖了 Kotlin, RecyclerView, AppCompat等少量的必须库).

Charles 已经在 Github 开源: . 有任何意见或者建议, 欢迎提 issue. 当然, 也欢迎你的 PR.

最后再次感谢 及.

附言1: Matisse 的命名来自 Henri Matisse, 一位法国画家, 野兽派的创始人及主要代表人物, 也是一位雕塑家及版画家. Charles 的命名并没有这么浪漫, 但是她和 Henri Matisse 还是有一些共同点的, 例如: Henri Matisse 是野兽派的创始人, 而 Charles 的代码确实也挺有野兽气息的(代码并不是那么优美, 笑~).

参考:

Matisse Android 图片选择器:

转载于:https://my.oschina.net/marktony/blog/1620607

你可能感兴趣的文章
从零开始学习PYTHON3讲义(十一)计算器升级啦
查看>>
从零开始学习PYTHON3讲义(三)写第一个程序
查看>>
WebGis设计模式
查看>>
cocos2dx ScrollView 测试一 触摸事件优先级和自动调整
查看>>
django 使用mysql数据库的流程
查看>>
Android系统移植与调试之------->如何修改Android设备的默认休眠时间
查看>>
我的Android进阶之旅------>Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)...
查看>>
uboot 传递的参数 mtdparts
查看>>
六种排序算法C语言版(上)
查看>>
292. Nim Game(easy)
查看>>
ERROR 1786 (HY000)
查看>>
Kubernetes 学习7 Pod控制器应用进阶2
查看>>
Python字符串相加以及字符串格式化
查看>>
11.08 轮换行值
查看>>
AIX lsof 命令
查看>>
微信小程序个人项目(node.js+koa2+koa-router+middleware+mysql+node-mysql-promise+axios)
查看>>
C#温故而知新学习系列之面向对象编程—类的数据成员(三)
查看>>
列表字典推导式
查看>>
HDOJ 1228 A+B(map水题)
查看>>
intellij IDEA 导入包的方法·
查看>>