Comments (11)
刚刚拜读了楼主的代码,楼主代码风*,**飘逸!但我有一点小小的建议楼主姑且一听,权当交流哈!
楼主使用了类似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.
@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中——在这篇文章中,我这样解释:
个人愚见,如果您有更好的建议,欢迎一起讨论哈。
当然,也真诚欢迎您一起加入RxImagePicker,一个人的思维终究是有局限性的,库也正是在大家的建议和贡献下,才会逐渐成熟 😄。
from rximagepicker.
提几点建议哈
1.建议支持微博长图:目前打开长图显示黑屏,显示不出图片。
2.增加类似发朋友圈的九宫格,点击放大浏览(支持滑动上下张、下载、删除)。
3.图片上传的压缩算法(支持自定义)
from rximagepicker.
lib module 的 glide 依赖最好还是去掉吧
如果作为公共库设计的话,需要考虑到实际项目图片加载库的重叠和 glide 版本的冲突
from rximagepicker.
另外考虑到 RxJava 1/2 的使用情况
ImagePicker 应该还是效仿其他 rx 库把 1.x 跟 2.x 分开单独维护
from rximagepicker.
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.
ImagePicker 应该还是效仿其他 rx 库把 1.x 跟 2.x 分开单独维护
这个是有意义的 👍 ,但是目前个人实在没有更多额外的精力去维护RxJava1的版本,因此只能搁置了,还望见谅。
from rximagepicker.
最新的版本中(v2.2.0-alpha),是这样设计的,Glide作为可选项,在库的打包编译时已经被移除出去了:
关于这个,我个人的意见是 ImagePicker 作为本地图片选择库,使用 Glide 的意义不是那么大,完全可以内部实现简单的缓存和列表加载来代替,当然也可以通过接口扩展使用 Glide 来加载
from rximagepicker.
了解,这是一个不错的建议,我会考虑加到后续的版本中。
from rximagepicker.
我有个疑问,@gallery 的注解中,openAsFragment 为什么默认是 true?我觉得UI需要作为Fragment展示在某个ViewGroup中的需求应该比单独开个Activity要少一些吧
from rximagepicker.
这个参数的默认配置我也想过,开发期最初它的值是false,但是最终我选择了true——以基本库为参考,默认打开系统相册和相机,都是通过打开一个不可见的fragment实现的。
我一直以来将知乎主题和微信主题的support视为RxImagePicker的示例demo来看待,因为不同appUI需求是不同的,虽然国内的很多app都是自己实现的图片选择器界面,但我参考了很多国外用户量千万级和亿万级的app,它们更倾向于使用系统原生的相册(比如FaceBook,Instagram等等),我认为还是以默认系统图片选择器的配置为主,因此
openAsFragment 默认是 true
这确实需要开发者多一步进行配置,我也在考虑重新修改该默认值的必要性,但我更希望得到大家的意见,您觉得目前的默认值合理吗? 😄
from rximagepicker.
Related Issues (20)
- 请问怎么控制打开选择activity的动画,比如从下往上弹起选择页面
- com.github.qingmei2:rximagepicker_support_wechat:2.5.6. Using this dependency gives error HOT 4
- 某些机型排序与系统相册排序不一致,从别的应用保存的图片不显示在最前方
- 图片加载引擎
- 使用系统相册多选怎么配置? HOT 1
- 屏幕旋转会崩溃 HOT 3
- 知乎主题图片选择器崩溃 HOT 4
- Unable to start activity 后台收集到崩溃日志,内容如下:有没有谁也遇到过该问题? HOT 10
- 如果带鲁班压缩就更好了
- bugly上崩溃日志java.lang.IllegalStateException cursor.getString(cursor.…UMN_BUCKET_DISPLAY_NAME)) must not be null HOT 2
- sync没问题,运行后报错 HOT 2
- bugly报错 HOT 1
- 已经选择的图片 如何再次回显到相册里
- 相机拍摄不会出现在Gallery里面
- 2.2.0版本自定义UI会闪退
- 请问有计划不使用rxjava 得版本嘛? 好像现在用kotlin不需要用到rxjava了 HOT 1
- fragment transaction error(?) issue(?) using androidx.fragment.app:1.3.0-alpha08
- 希望能有个 androidX 版本 HOT 1
- 希望出RxJava3的正式版
- 相机权限问题 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rximagepicker.