相关方法
- with():指定了声明周期
- load():加载资源,String/Uri/File/Integer/URL/byte[]/T,或者 loadFromMediaStore(Uri uri)
- placeholder(resourceId/drawable): 设置资源加载过程中的占位Drawable。
- error():load失败时显示的Drawable。
- crossFade()/crossFade(int duration):imageView改变时的动画,version 3.6.1后默认开启300毫秒
- dontAnimate():移除所有的动画。
- override() :调整图片大小
- centerCrop():图片裁剪,ImageView 可能会完全填充,但图像可能不会完整显示。
- fitCenter(): 图像裁剪,图像将会完全显示,但可能不会填满整个 ImageView。
- animate(): 指定加载动画。
- transform():图片转换。
- bitmapTransform(): bitmap转换,不可以和(centerCrop() 或 fitCenter())共用。
- priority(Priority priority):当前线程的优先级,Priority.IMMEDIATE,Priority.HIGH,Priority.NORMAL(default),Priority.LOW
- thumbnail(): 缩略图.
- listener():异常监听
- preload(int width, int height): 预加载resource到缓存中(单位为pixel)
- fallback(Drawable drawable):设置model为空时显示的Drawable。
- using() :为单个的请求指定一个 model
- asGif():Gif 检查,如果是图片且加了判断,则会显示error占位图,否则会显示图片
- asBitmap():bitmap转化,如果是gif,则会显示第一帧
Glide 可以以load(File)的形式播放本地视频,但是如果需要播放网络视屏,则要用VideoView
Glide 4.0.0 RC0 官方说明
demo下载地址:
http://download.csdn.net/detail/github_33304260/9863653
1.变化
单独列出的更改太多,但这里有一些亮点:
- 新的文档,用户可以通过提交请求到Glide’s gh-pages分支贡献。
- 用户可以添加新类型或自定义选项集来轻松地自定义Glide流畅的API。
- 大量简化个人请求类型,确保选项始终如一,易于使用,即使您正在加载不同类型的资源。
- 各种性能改进,包括在下载采样图像时大量减少垃圾,更加智能的默认磁盘缓存策略,以及加载GIF时性能提升。
- 改进了视图大小和布局的处理,特别是在RecyclerView中。
2.状态
Glide 4.0由Google的各种团队内部使用,4.0被认为是内部稳定的。但外部用户可能会发现内部尚未发现的问题。因此,将此作为RC发布。如果没有发现稳定性或API中的重大问题,预计不久之后就会发布非RC版本。
3.发布时间表
Glide在过去采取了一种相当随意的方式发布,主要是因为在空闲的时候采取做。未来,Glide有望尝试提供定期发布:
- 每个月15日左右发行(确切的日期可能有所不同)
- 只有在前版本中没有更改的情况下才会跳过此版本。
- 只有在主要版本升级的时候才会去更改API。
4.下载
链接 | 大小 |
---|---|
glide-full-4.0.0-RC0-javadoc.jar | 1.3 MB |
glide-full-4.0.0-RC0-sources.jar | 341 KB |
glide-full-4.0.0-RC0.jar | 582 KB |
Source code (zip) | |
Source code (tar.gz) |
更多下载请移步官网:Glide 4.0.0 RC0 官方说明
从V3迁移到V4
1.Options(选项)
一个在GlideV4变化较大的是库处理选项的方式(centerCrop(),placeholder()等)。在Glide v3中,选项是由一系列复杂的多类型构建器单独处理的。在Glide v4中,这些已被具有单一类型的单个构建器和可以提供给构建器的一系列选项的对象所替代。Glide 生成的API通过将选项对象和任何包含的集成库与构建器的选项合并,来创建单个流畅的API。
如下,options分类被放在不同的对象里,我们挨着看每个具体的方法:
(1)RequestBuilder
包括以下方法:
listener()
thumbnail()
load()
into()
在Glide v4中,只有一个RequestBuilder,它使用单一的类型加载到你的项目(类型Bitmap,Drawable,GifDrawable等)。RequestBuilder提供了影响加载过程本身的选项,比如要加载的类型(url, uri etc),任何 thumbnail()和listener()请求,RequestBuilder也提供在哪里开始加载的方法, into() or preload()。
我们看一下,下面的示例代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
实战示例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
效果图:
我们可以看到第一次安装完成之后,在gif没有加载出来先加载缩略图,然后再加载gif图片,个人感觉加载gif图片的速度是比之前快多了,这些都是加载网络图片和网速也有一定关系。
加载完成后,推出APP,再次进入会首先加载之前缓存在本地的图片,所以还是那么的爽。
(2)RequestOptions
包括以下方法:
centerCrop()
placeholder()
error()
priority()
diskCacheStrategy()skipMemoryCache()
大多数的设置已经放到了RequestOptions对象中:
示例:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
RequestOptions一次设置之后,可以在多处使用
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
实战实例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
效果图:
缓存策略
一张图片变化很快,需要禁止内存缓存
- 1
- 1
即使关闭内存缓存,请求图片将会仍然被存储在设备的磁盘缓存中,如果一张图片变化很快,仍需要禁止磁盘缓存
- 1
- 1
Glide 缓存了原始图像,全分辨率图像和另外小版本的图像,因此禁用磁盘缓存是用枚举来控制的
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
Glide使用InternalCacheDiskCacheFactory类建立磁盘缓存。目录在
/data/data/<package-name>/cache
,其他应用程序无法访问。
优先级
会发现优先级高的先 显示出来,即是图片比较大。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
先显示缩略图,后显示原图
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
图片处理
裁剪、模糊、滤镜等。可以s使用 wasabeef/glide-transformations ,
实现Transformation 接口,或者使用抽象类BitmapTransformation,
通过transform()或bitmapTransform()来处理图片
(3)TransitionOptions
顾名思义,变换相关的设置在这里:
包括以下方法:
crossFade()
animate()
选择一个你所需要的TransitionOptions:
如果想去掉默认的变换效果:TransitionOptions.dontTransition().
Transitions被要求用在 RequestBuilder
示例:
- 1
- 2
- 3
- 1
- 2
- 3
实战示例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
效果图:
(4)生成的API
关于
GlideV4:使用一个注释处理器生成了一个API,允许应用程序访问的所有选项RequestBuilder,RequestOptions以及任何包含集成库在一个流畅的API。
生成的API有两个目的:
- 集成库可以通过自定义选项扩展Glide的API。
- 应用程序可以通过添加捆绑常用选项的方法来扩展Glide的API。
尽管这两个任务都可以通过编写RequestOptions的自定义子类来手工完成,但是这样做是具有挑战性的,并且会产生一个不那么流畅的API。
入门
要触发API生成,请在应用程序中包含一个AppGlideModule实现:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
请注意,AppGlideModule实现必须始终注释@GlideModule。如果注释不存在,则不会发现该模块,并且您将在日志中看到一条带有Glide日志标记的警告,该日志标记指示该模块无法找到。
API在与应用程序AppGlideModule提供的实现相同的包中生成,并且GlideApp默认命名。应用程序可以通过启动所有,加载GlideApp.with()
而不是使用API Glide.with()
:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
请注意,与Glide.with()类似的选项fitCenter(),并placeholder()提供直接的建设者,并不需要传递作为一个独立的RequestOptions对象。
实战演示
创建自定义GlideModle:
⚠️ 有的童鞋发现@GlideModule
之后并没有生成GlideAPP对象,这时候需要注意两步:
1、依赖是否都导入
compile 'com.github.bumptech.glide:glide:4.0.0-RC0'
compile 'com.github.bumptech.glide:compiler:4.0.0-RC0'
compile 'com.Android.support:support-v4:25.3.1'
2、点击“Make Project”
这时候会发现自定义的AppGlideModle被注入到GeneratedAppGlideModuleImpl里面,如图:
这时候已经可以去使用GlideApp.with(this)
,接下来就会让我们回到熟悉的感觉:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
是不是有种找回了记忆中的味道!!!
2.Types and Targets (类型和目标)
(1)加载的资源类型
Glide允许您指定要加载的资源类型。如果指定超类型,则Glide将尝试加载任何可用的子类型。例如,如果您要求Drawable,Glide可能会加载BitmapDrawable或GifDrawable。如果您要求GifDrawable,如果图像不是GIF,Glide将加载GifDrawable或错误(即使它恰好是完全有效的图像)。
默认情况下请求可绘制值:
- 1
- 1
要求位图:
- 1
- 1
获取文件路径(最适合本地映像):
- 1
- 1
要将远程文件下载到缓存中并获取文件路径:
- 1
- 2
- 3
- 1
- 2
- 3
(2)Drawables
GlideDrawable在Glide v3已被删改为Android Drawable。GlideBitmapDrawable已被删改为BitmapDrawable。
如果你想知道一个Drawable是否是动画的,你可以检查它是否是一个实例Animatable:
- 1
- 1
(3)Targets
onResourceReady的回调已经发生了改变,例如Drawables:
以前:
- 1
- 1
现在:
- 1
- 1
同样onLoadFailed也改变了:
以前:
- 1
- 1
现在:
- 1
- 1
如果需要有关加载失败或成功的信息,可以使用RequestListener。
3.Configuration(配置)
在Glide v3中,可以配置一个活着多个GlideModules。在Glide v4中,通过类似但稍微更复杂的系统进行配置。
(1)Applications(应用)
应用中的GlideModule转换成AppGlideModule。
在Glide v3中,你可得GlideModule可能是这样的:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
在Glide v4中,您可以将其转换成AppGlideModule如下所示:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
⚠️注意: Glide4.0 必须要使用注解: `@GlideModule
您的应用程序有多个GlideModules,将其中一个转换为AppGlideModule,其他的转换为LibraryGlideModules。除非出现一个AppGlideModule,否则不会发现LibraryGlideModules,因此您不能只使用LibraryGlideModules。`
(2)Libraries
有一个或多个GlideModules的库应该使用LibraryGlideModule而不是AppGlideModule。库不应该使用AppGlideModules,因为每个应用程序只能有一个,所以在一个库中包含它不仅会阻止库的用户设置他们自己的选项,而且如果多个库包含一个AppGlideModule,它也会导致冲突。
例如, the Volley GlideModule 在 V3:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
在V4中转换成如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
(3)Manifest parsing
为了简化迁移,清单解析和旧GlideModule界面已被弃用,但在v4中仍然支持。AppGlideModules,LibraryGlideModules和被弃用GlideModule的都可以在应用程序中共存。
但是,为了避免检查元数据(和相关的错误)的性能开销,您可以在迁移完成后通过覆盖以下方法来禁用清单解析AppGlideModule:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
有兴趣的小伙伴,可以扫描二维码,加入技术群,一起分享技术
原文http://blog.csdn.net/bodhixu/article/details/76283887