Glide从V3到V4的探索
来源:互联网 发布:windows日志看不懂 编辑:程序博客网 时间:2024/06/05 12:58
关于glide的前世今生,相信每一个搞Android开发的小伙伴都不会陌生,这里我也就不多做叙述了,不了解的小伙伴,可以先阅读https://github.com/bumptech/glide
这篇博客主要是讲Glided的版本从v3升级到v4后,一些方法及使用规则的改动
- 常规使用
通常,glide被使用的最多的无疑是with+load+into的组合:
Glide.with(mContext).load(file).into(viewHolder.albumimag);
对于这个大众通用的方法,版本升级后并没有做出大的改动
- 其他扩展性的方法
glide之所以受大众喜爱,能在诸如imageloader,picasso,等诸多高手中杀出一条血路,当然有自己的杀手锏了,除了上面的常规用法外,glide还有其他诸多用法,如
Glide.with(mContext).load(file).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(viewHolder.albumimag);
Glide.with(mContext) .load(bitmaps.get(position % bitmaps.size())) .placeholder(R.drawable.loading) .diskCacheStrategy(DiskCacheStrategy.SOURCE) .into(imageView);
Glide.with(context).load(images.get(position)).asBitmap().into(new MyTarget(photoViewAttacher));
Glide.with(context) .load(contentEntity.getIcon()) .placeholder(R.drawable.loading) .transform(new CircleTransform(context)) .into(topicImgView.getBinding().ivTopicDetailHeader);
方法众多,用法不一,这里就不逐一列举了,不过从上面几个的用法中,不难发现,所有的方法都采取的时方便的链式编程,不过,自从Glide的版本从v3升级到v4后,你或许会神奇的发现,整个项目中突然报出了一大片红.
WTF?是不是当场懵逼了?开始怀疑人生了?刚才还好端端的代码怎么突然就报错了?难道是长时间的超负荷工作导致眼花了?…
NO!NO!NO!都不是,少年,这不是你的错!而是Glide从V3升级到V4了!
最好的解决办法是什么,难不成要把刚替换完成的依赖重新变回到以前的版本
compile 'com.github.bumptech.glide:glide:4.0.0-RC1'
当然,这也未尝不可,不过,作为一只有探索精神的程序猿,你真的甘心吗?
既然不甘心,那么就让我们一起来看看V4版的glide都做了哪些变动
先看github上的解释
Migrating from v3 to v4:http://bumptech.github.io/glide/doc/migrating.html
从官方的说法来看,主要有三个大的模块做出了变动
1. Options
- RequestBuilder
RequestOptions
TransitionOptions
Generated API
2. Types and Targets
- Picking Resource
- Types Drawables
- Targets
- Cancellation
3.Configuration
- Applications
- Libraries
- Manifest parsing
RequestBuilder
指定加载类型。asBitmap()、asGif()、asDrawable()、asFile()。指定要加载url/model。指定要加载到那个View。指定要应用的RequestOption指定要应用的TransitionOption指定要加载的缩略图
RequestOptions的API
centerCrop()placeholder()error()priority()diskCacheStrategy()
也就是说以前可以链式编程的方法都被封装起来了,所以升级后找不到了,自然也就会报错了
既然封装了,就可以利用这个类来调用了
具体的用法如:
Glide.with(context) .load(itemsBean.getUicon()) .apply(new RequestOptions().placeholder(R.drawable.loading).transform(new CircleTransform(context))) .into(holder.getBinding().ivCommentDalHeader);
TransitionOptions包含三个子类:
- GenericTransitionOptions
- DrawableTransitionOptions
- BitmapTransitionOptions
移除默认的transition,使用TransitionOptions.dontTransition()
用法如下
Glide.with(fragment) .load(url) .transition(withCrossFade(R.anim.exent, 300));
Generated API
这个可就有意思了,因为用到了注解的方式,你懂得
- 运用程序中应该创建一个带有@GlideModule注解的AppGlideModule子类,来使用generated APIGenerated API添加一个GlideApp类,该类能够提供对RequestBuilder和RequestOptions子类的访问。RequestOptions子类包含RequestOptions包含的全部方法和GlideExtensions定义的方法。RequestBuilder子类不需要使用apply方法,来访问RequestBuilder子类中全部方法
如:
@GlideModulepublic class CustomGlideModule extends AppGlideModule { @Override public void applyOptions(Context context, GlideBuilder builder) { int memoryCacheSizeBytes = 1024 * 1024 * 20; // 20mb builder.setMemoryCache(new LruResourceCache(memoryCacheSizeBytes)); }}
具体可以参照http://sjudd.github.io/glide/doc/generatedapi.html
当然,使用GlideApp,需要添加annotationProcessor 的依赖
annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0-RC0'
使用GlideAPI
GlideApp.with(fragment) .load(url) .centerCrop() .placeholder(R.drawable.placeholder) .error(R.drawable.error) .priority(Priority.HIGH) .into(imageView);
不使用时
Glide.with(fragment) .load(url) .apply(centerCropTransform() .placeholder(R.drawable.placeholder) .error(R.drawable.error) .priority(Priority.HIGH)) .into(imageView);
大家发现有什么不同了吗?
没错! 使用GlideAPI时RequestOptions被内嵌调用了
Types and Targets
- 在使用Glide时,可以指定你想加载的资源类型。倘若你指定了一个超类的类型,Glide将尝试加载一个可用的子类类型。例如,指定加载类型是Drawable,Glide会加载BitmapDrawable或者GifDrawable。
Configuration
- 在Glide v3中,使用一个或者多个GlideModules来执行配置,但升级到V4后,配置发生了一些改变,具体可以参考
http://sjudd.github.io/glide/doc/configuration.html
Applications
- 若是运用程序中具备多个GlideModules,将其中一个转成AppGlideModule,其他的转成LibraryGlideModules。倘若,存在AppGlideModule的时候,才会发现LibraryGlideModule。因此,不能仅适用LibraryGlideModules
Libraries
- 拥有一个或者多个的GlideModule的库应该使用LibraryGlideModule而不是AppGlideModule。库不应是使用AppGlideModules,因为每个运用程序只有一个AppGliModules。因此,包含在唯一一个库的AppGlideModules,不会阻止库去设置库本身的options。多个库包含一个AppGlideMoudle,它会导致冲突。
好了,到这里就结束了,如果想了解更多,可以参考github上的官方文档
资源参考:
- Glide框架:http://blog.csdn.net/hexingen/article/details/72577453
- Migrating from v3 to v4:http://bumptech.github.io/glide/doc/migrating.html
- Generated API http://sjudd.github.io/glide/doc/generatedapi.html
- Configuration http://sjudd.github.io/glide/doc/configuration.html
- Glide 4.0.0 RC0 官方说明
https://github.com/bumptech/glide/releases/tag/v4.0.0-RC0
- Glide从V3到V4的探索
- Glide从V3到V4的探索
- 从Inception v1,v2,v3,v4,RexNeXt到Xception再到MobileNets,ShuffleNet
- Glide V4的封装使用
- 从Picasso到Glide
- Glide V4 框架新特性(Migrating from v3 to v4)
- D3 V3 与V4的变化
- react-router 从 v2/v3 to v4 迁移
- Glide最新版V4使用指南
- Glide v4 GlideApp
- Glide v4 用法
- Glide v4详解
- Glide v4 知识点总结
- Glide V4源码解析
- Glide最新版V4使用指南
- Google从入门到精通 v4.0
- Google从入门到精通 v4.0
- Google从入门到精通 v4.0
- 七月英语总结
- HDU 6053 TrickGCD (莫比乌斯函数+分块筛)
- 1083. List Grades (25)
- String.concat连接字符串
- maven配置文件setting.xml详解
- Glide从V3到V4的探索
- webview系列:业内知名公司的混合开发实践
- 浅说《测试用例》----给测试新手的
- File and Code templates 不换行的解决方法
- Linux学习之前
- Metasploit学习笔记(一) 信息收集
- Redis主从集群以及sentinel集群安装和配置总结
- hdu 6047Maximum Sequence(贪心)
- php控制访问人数的方法