Glide从V3到V4的探索
来源:互联网 发布:淘宝兼职可信不 编辑:程序博客网 时间:2024/06/05 19:22
关于glide的前世今生,相信每一个搞Android开发的小伙伴都不会陌生,这里我也就不多做叙述了,不了解的小伙伴,可以先阅读https://github.com/bumptech/glide
这篇博客主要是讲Glided的版本从v3升级到v4后,一些方法及使用规则的改动
- 常规使用
通常,glide被使用的最多的无疑是with+load+into的组合:
Glide.with(mContext).load(file).into(viewHolder.albumimag);
- 1
- 1
对于这个大众通用的方法,版本升级后并没有做出大的改动
- 其他扩展性的方法
glide之所以受大众喜爱,能在诸如imageloader,picasso,等诸多高手中杀出一条血路,当然有自己的杀手锏了,除了上面的常规用法外,glide还有其他诸多用法,如
Glide.with(mContext).load(file).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(viewHolder.albumimag);
- 1
- 1
Glide.with(mContext) .load(bitmaps.get(position % bitmaps.size())) .placeholder(R.drawable.loading) .diskCacheStrategy(DiskCacheStrategy.SOURCE) .into(imageView);
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
Glide.with(context).load(images.get(position)).asBitmap().into(new MyTarget(photoViewAttacher));
- 1
- 1
Glide.with(context) .load(contentEntity.getIcon()) .placeholder(R.drawable.loading) .transform(new CircleTransform(context)) .into(topicImgView.getBinding().ivTopicDetailHeader);
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
方法众多,用法不一,这里就不逐一列举了,不过从上面几个的用法中,不难发现,所有的方法都采取的时方便的链式编程,不过,自从Glide的版本从v3升级到v4后,你或许会神奇的发现,整个项目中突然报出了一大片红.
WTF?是不是当场懵逼了?开始怀疑人生了?刚才还好端端的代码怎么突然就报错了?难道是长时间的超负荷工作导致眼花了?…
NO!NO!NO!都不是,少年,这不是你的错!而是Glide从V3升级到V4了!
最好的解决办法是什么,难不成要把刚替换完成的依赖重新变回到以前的版本
compile 'com.github.bumptech.glide:glide:4.0.0-RC1'
- 1
- 1
当然,这也未尝不可,不过,作为一只有探索精神的程序猿,你真的甘心吗?
既然不甘心,那么就让我们一起来看看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指定要加载的缩略图
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
RequestOptions的API
centerCrop()placeholder()error()priority()diskCacheStrategy()
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
也就是说以前可以链式编程的方法都被封装起来了,所以升级后找不到了,自然也就会报错了
既然封装了,就可以利用这个类来调用了
具体的用法如:
Glide.with(context) .load(itemsBean.getUicon()) .apply(new RequestOptions().placeholder(R.drawable.loading).transform(new CircleTransform(context))) .into(holder.getBinding().ivCommentDalHeader);
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
TransitionOptions包含三个子类:
- GenericTransitionOptions
- DrawableTransitionOptions
- BitmapTransitionOptions
移除默认的transition,使用TransitionOptions.dontTransition()
用法如下
Glide.with(fragment) .load(url) .transition(withCrossFade(R.anim.exent, 300));
- 1
- 2
- 3
- 1
- 2
- 3
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)); }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
具体可以参照http://sjudd.github.io/glide/doc/generatedapi.html
当然,使用GlideApp,需要添加annotationProcessor 的依赖
annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0-RC0'
- 1
- 1
使用GlideAPI
GlideApp.with(fragment) .load(url) .centerCrop() .placeholder(R.drawable.placeholder) .error(R.drawable.error) .priority(Priority.HIGH) .into(imageView);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
不使用时
Glide.with(fragment) .load(url) .apply(centerCropTransform() .placeholder(R.drawable.placeholder) .error(R.drawable.error) .priority(Priority.HIGH)) .into(imageView);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
大家发现有什么不同了吗?
没错! 使用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
- Android 面试题基础集锦《一》
- C++读写文件
- MyBatis入门
- Is It A Tree?(普通的思维逻辑)
- POJ1287Networking(最小生成树,prim算法)
- Glide从V3到V4的探索
- Echarts柱状图实现
- 实现购物车 全选全不选,反选,单选-选满时同步全选复选框--复选框checked属性取值问题已解决
- 配置tomcat服务器内存大小中的Xms、Xmx、PermSize、MaxPermSize 详解
- CSDN-markdown编辑器的使用
- Android使用EditText输入浮点型数字设置第一位不能输入小数点并且保留两位小数
- Android基础_相机 图库 infaceview(十)
- 内存泄露、内存溢出
- mysql复制数据库的恢复