V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MarkTonyFromMars
V2EX  ›  Android

Charles - Android 多媒体选择器

  •  
  •   MarkTonyFromMars · 2018-02-09 12:58:34 +08:00 · 8759 次点击
    这是一个创建于 2515 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Charles - Android 多媒体选择器

    首先祝大家小年好!

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

    抱歉图片排版没弄好, V2 的 MarkDown 貌似不支持表格?

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

    我们来看看 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 内部提供了两种图片加载引擎: GlidePicasso. 当然, 如果以上两种都不是你所需要的, 你还可以自定义图片加载引擎, 只需要实现一个接口就好了. Charles 目前并不支持 Fresco.

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

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

    最后再次感谢 gejiaheng知乎团队.

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

    参考:

    Matisse Android 图片选择器: https://zhuanlan.zhihu.com/p/26420284

    6 条回复    2018-02-10 14:18:32 +08:00
    475797650
        1
    475797650  
       2018-02-09 14:28:12 +08:00
    不错,已 star
    MarkTonyFromMars
        2
    MarkTonyFromMars  
    OP
       2018-02-09 14:40:06 +08:00
    @475797650 感谢大佬😄
    davy1995
        3
    davy1995  
       2018-02-09 22:23:51 +08:00 via Android
    kotlin 写的啊,很赞
    MarkTonyFromMars
        4
    MarkTonyFromMars  
    OP
       2018-02-09 22:36:22 +08:00   ❤️ 1
    @davy1995 谢谢😄, 100% Kotlin
    warcraft1236
        5
    warcraft1236  
       2018-02-10 13:23:36 +08:00
    charles 不是抓包工具吗?
    MarkTonyFromMars
        6
    MarkTonyFromMars  
    OP
       2018-02-10 14:18:32 +08:00 via Android
    @warcraft1236 此 Charles 得彼 Charles
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2655 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 09:35 · PVG 17:35 · LAX 01:35 · JFK 04:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.