RxImagePicker

Introduction: :star2: 支持 RxJava2、灵活可高度定制的 Android 图片选择架构,提供了微信和知乎主题的 UI 支持。
More: Author   ReportBugs   OfficialWebsite   
Tags:

Download

RxImagePicker 的设计起源,请参考我的这篇文章

通知(重要)

简介

RxImagePicker 存在的目的是:让开发者能够简单并且灵活的方式实现 Android 开发中图片选择的需求。

它与传统的其他三方的图片选择库不同的是,后者通过跳转到固定的 Activity 进行图片选择,并不能满足所有应用的需求;以 QQ 聊天会话界面的图片选择功能为例,这种特殊的 UI 需求很难依靠图片选择库实现,开发者只能去自己实现。

一旦和目前项目的需求有了冲突(修改或者添加),开发者考虑的不应该是【这个库实现不了,干脆换一个库吧】或者【不管这个库,我去再单独实现一个】,而是,基于同一个图片选择框架,修改或者添加对应配置的接口

screenshot_qq

RxImagePicker 是一个用于 Android 的响应式图片选择器,它将您的图片选择需求转换为一个接口进行配置,并在任何一个 Activity 或者 Fragment 中展示任何样式的图片选择 UI。

支持的功能

  • [x] Android Camera 拍照
  • [x] Android 图片选择
  • [x] 以响应式数据流的格式返回数据(支持 Observable/Flowable/Single/Maybe)
  • [x] 支持拓展数据,比如用于实现微信 发送原图 等功能,完全由您自定义灵活进行配置

UI 的支持

除了 Android 系统默认的图片选择样式,你可以选择使用这些额外的 UI 支持:

  • [x] 系统级别图片选择器
  • [x] 知乎主题图片选择器
  • [x] 微信主题图片选择器
  • [x] 自定义 UI 图片选择器

示例截图

系统图片选择和结果展示

知乎主题

微信主题

想要 快速实现上图所示效果 请点击这里查看 wiki 中的详细文档。

基础使用

1. 添加依赖在 Module 的 build.gradle 文件中:

// 最基础的架构,仅提供了系统默认的图片选择器和拍照功能
compile 'com.github.qingmei2:rximagepicker:0.4.0'

// 提供了自定义 UI 图片选择器的基本组件,自定义 UI 的需求需要添加该依赖
compile 'com.github.qingmei2:rximagepicker_support:0.4.0'

// 如果需要额外的 UI 支持,请选择依赖对应的 UI 拓展库
compile 'com.github.qingmei2:rximagepicker_support_zhihu:0.4.0'     // 知乎图片选择器
compile 'com.github.qingmei2:rximagepicker_support_wechat:0.4.0'    // 微信图片选择器

2. 接口配置

声明一个接口,并进行基础的配置:

public interface MyImagePicker {

    @Gallery    //打开相册选择图片
    Observable<Result> openGallery();

    @Camera    //打开相机拍照
    Observable<Result> openCamera();
}

3. 实例化接口并使用它

在您的 Activity 或者 Fragment 中实例化该接口,以打开系统默认的相册/相机界面:

//打开系统默认的图片选择器
private void onButtonClick() {
    new RxImagePicker.Builder()
            .with(this)
            .build()
            .create(MyImagePicker.class)
            .openGallery()
            .subscribe(new Consumer<Result>() {
                @Override
                public void accept(Result result) throws Exception {
                    Uri uri = result.getUri();
                    // 对图片进行处理,比如加载到 ImageView 中
                    GlideApp.with(this)
                             .load(uri)
                             .into(ivPickedImage);
                }
            });
}

详细文档

关于 RxImagePicker 更详细的使用说明,进阶使用和拓展功能,请参考 wiki!

参考

RxImagePicker 的设计过程中,我参考了很多的三方库,它们源码中优秀的 设计思想 或者 架构设计 ,都给与了我很大的启示,在此深表感谢,感谢诸多开源爱好者前辈们的无私精神:

Contributor

License

The RxImagePicker:MIT License

Copyright (c) 2018 qingmei2

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Support Me
Apps
About Me
Google+: Trinea trinea
GitHub: Trinea