Giter VIP home page Giter VIP logo

Comments (11)

LeoYu007 avatar LeoYu007 commented on July 29, 2024

刚刚拜读了楼主的代码,楼主代码风*,**飘逸!但我有一点小小的建议楼主姑且一听,权当交流哈!
楼主使用了类似Retrofit的**用注解和动态代理的方式来配置接口,但是注解可配置项仅仅只有UI主题而已,而具体的选择的类型,数量、主题等等配置又放到了Configuration中,如下:

 //微信图片选择器UI的配置
new WechatConfigrationBuilder(MimeType.ofAll(), false) 
        .maxSelectable(9)
        .countable(true)
        .spanCount(4)
        .countable(false)
        .theme(R.style.Wechat)
        .build()

其实这个配置完全可以放到@gallery注解中去,全部通过注解配置所有参数,使用变成如下形式:

// 1、定义接口
public interface ImagePicker {

    @Gallery(viewKey = "ZHIHU", mimeType = "all", maxSelectable = 9, countable = true, countable = false )
    Observable<Uri> openGalleryZhiHu();

    @Gallery(viewKey = "WECHAT", mimeType = "all", maxSelectable = 9, countable = false, countable = true)
    Observable<Uri> openGalleryWechat();

    @Camera
    Single<Uri> openCamera();
}

// 2、创建ImagePicker,RxImagePicker如果没有什么配置的参数,也可以不用建造者模式
WechatImagePicker imagePicker = new RxImagePicker.Builder()
                .with(this)
                .build()
                .create(WechatImagePicker.class);

// 3、选择图片
imagePicker.openGalleryZhiHu();
// imagePicker.openGalleryWechat();
// imagePicker.openCamera();

个人觉得这样要合理一点,已经fork,如果楼主觉得还行,愿意贡献代码哈

from rximagepicker.

qingmei2 avatar qingmei2 commented on July 29, 2024

@LambertCoding

感谢您的建议 👍

在库设计的伊始,我是这么想的,后来我选择了目前这种实现的方式,原因是:

RxImagePicker 提供了快速实现 仿微信图片选择 和 知乎风格图片选择 的UI支持,但它们 并不重要 ,因为 每个APP的业务需求是不同的

每种不同的图片选择器都有不同的UI设计,以及对应的功能,举例来说,微信的图片选择器也许提供了 原图 功能,而知乎的则没有。

这意味着,如果直接将这些 UI层 相关的配置(maxSelectable、countable)直接放入底层的 @gallery 或者 @CAMERA注解中,对于部分其他的 UI主题,这些属性可能毫无意义——至少,对于系统级别的相册选择,这些属性是这样的,它们可能会给开发者带来困扰。

#15 这张票里,一位朋友提出了是否要添加 一个配置,用来 将之前选择了的图片反映到图片选择界面的UI上

我一开始认为这是有必要的,并准备放在底层的基础库中实现,类似这样:

//@Filter注解,放在底层,进入界面时,默认选中一些item
Observable<Uri> gallery(@Filter List<Uri>);

但后来我思考觉得,这个功能更应该放在 WechatConfigrationBuilder 中进行配置,因为这个功能更类似 UI层的拓展功能

所以我认为,这些 UI层的拓展功能 的配置可选项,更应该放在更上层的support主题库中,而不是底层,于是我创建了WechatConfigrationBuilder这个类,并在RxImagePicker.Builder中通过依赖注入传递给上层的UI中——在这篇文章中,我这样解释:

image

个人愚见,如果您有更好的建议,欢迎一起讨论哈。

当然,也真诚欢迎您一起加入RxImagePicker,一个人的思维终究是有局限性的,库也正是在大家的建议和贡献下,才会逐渐成熟 😄。

from rximagepicker.

GillX avatar GillX commented on July 29, 2024

提几点建议哈
1.建议支持微博长图:目前打开长图显示黑屏,显示不出图片。
2.增加类似发朋友圈的九宫格,点击放大浏览(支持滑动上下张、下载、删除)。
3.图片上传的压缩算法(支持自定义)

from rximagepicker.

alvince avatar alvince commented on July 29, 2024

lib module 的 glide 依赖最好还是去掉吧
如果作为公共库设计的话,需要考虑到实际项目图片加载库的重叠和 glide 版本的冲突

from rximagepicker.

alvince avatar alvince commented on July 29, 2024

另外考虑到 RxJava 1/2 的使用情况
ImagePicker 应该还是效仿其他 rx 库把 1.x 跟 2.x 分开单独维护

from rximagepicker.

qingmei2 avatar qingmei2 commented on July 29, 2024

@alvince

lib module 的 glide 依赖最好还是去掉吧

最新的版本中(v2.2.0-alpha),是这样设计的,Glide作为可选项,在库的打包编译时已经被移除出去了:

dependencies {
    compileOnly rootProject.ext.dependencies["glide"]
    kapt rootProject.ext.dependencies["glide-compiler"]
}

因此,最新版本的依赖配置中,用户必须手动配置添加Glide或者其他图片加载库的依赖,否则会导致运行时崩溃(can't find class Glide........)。

from rximagepicker.

qingmei2 avatar qingmei2 commented on July 29, 2024

@alvince

ImagePicker 应该还是效仿其他 rx 库把 1.x 跟 2.x 分开单独维护

这个是有意义的 👍 ,但是目前个人实在没有更多额外的精力去维护RxJava1的版本,因此只能搁置了,还望见谅。

from rximagepicker.

alvince avatar alvince commented on July 29, 2024

@qingmei2

最新的版本中(v2.2.0-alpha),是这样设计的,Glide作为可选项,在库的打包编译时已经被移除出去了:

关于这个,我个人的意见是 ImagePicker 作为本地图片选择库,使用 Glide 的意义不是那么大,完全可以内部实现简单的缓存和列表加载来代替,当然也可以通过接口扩展使用 Glide 来加载

from rximagepicker.

qingmei2 avatar qingmei2 commented on July 29, 2024

@alvince

了解,这是一个不错的建议,我会考虑加到后续的版本中。

from rximagepicker.

DanteAndroid avatar DanteAndroid commented on July 29, 2024

我有个疑问,@gallery 的注解中,openAsFragment 为什么默认是 true?我觉得UI需要作为Fragment展示在某个ViewGroup中的需求应该比单独开个Activity要少一些吧

from rximagepicker.

qingmei2 avatar qingmei2 commented on July 29, 2024

@DanteAndroid

这个参数的默认配置我也想过,开发期最初它的值是false,但是最终我选择了true——以基本库为参考,默认打开系统相册和相机,都是通过打开一个不可见的fragment实现的。

我一直以来将知乎主题微信主题的support视为RxImagePicker的示例demo来看待,因为不同appUI需求是不同的,虽然国内的很多app都是自己实现的图片选择器界面,但我参考了很多国外用户量千万级和亿万级的app,它们更倾向于使用系统原生的相册(比如FaceBook,Instagram等等),我认为还是以默认系统图片选择器的配置为主,因此

openAsFragment 默认是 true

这确实需要开发者多一步进行配置,我也在考虑重新修改该默认值的必要性,但我更希望得到大家的意见,您觉得目前的默认值合理吗? 😄

from rximagepicker.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.