Glide入门教程——16.用Modules定制Glide
来源:互联网 发布:网络剧堪比权力的游戏 编辑:程序博客网 时间:2024/06/05 04:33
Glide — 用Modules定制Glide
原文:Customize Glide with Modules
作者:Norman Peitek
翻译:Dexter0218
上篇文章,我们介绍了如何设置一些网络协议栈去加载图片。本质上,集成网络库没啥其他特殊的,就是定义一个GlideModule
来定制Glide的行为。这篇文章,我们会对Glide Modules
进行概述。
原文链接:http://www.jianshu.com/p/90b4749e59d2
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
Glide Modules
Glide modules是一个全局改变Glide行为的抽象的方式。你需要创建Glide的实例,来访问GlideBuilder。可以通过创建一个公共的类,实现GlideModule的接口来定制Glide:
public class SimpleGlideModule implements GlideModule { @Override public void applyOptions(Context context, GlideBuilder builder) { // todo } @Override public void registerComponents(Context context, Glide glide) { // todo }}
接口提供了两个方法去调节Glide的不同部分,本文中,我们大部分内容只研究第一个方法:applyOptions(Context context, GlideBuilder builder)
。
你已经知道需要创建一个额外的类去自定义Glide。下一步是要在全局中声明这个类,这样Glide知道它应该加载并使用它。Glide会扫描AndroidManifest.xml
的Glide modules的meta
定义。这样,你必须在AndroidManifest.xml
里的<application>
标签下声明刚创建的Glide module。
<manifest ... <application> <meta-data android:name="io.futurestud.tutorials.glide.glidemodule.SimpleGlideModule" android:value="GlideModule" /> ... </application></manifest>
确保你设置android:name
为你自己的包名+类名,这样才能正确引用。你不需要添加其他的代码到其中。如果你想要禁止Glide Module,只要从AndroidManifest.xml
里移除它。Java类里的代码可以留着供以后使用。当在AndroidManifest.xml
里没有引用的时候,它永远不会被加载。
Glide推荐实现自定义module的方式有一个好处:你可以一次同时声明多个Glide Module。Glide会(没有特殊的顺序)都遍历所有声明的module。由于你当前未定义顺序,确保你的定制不会造成冲突!
GlideBuilder
你已经知道如何使用Glide module去自定义Glide。现在我们看一下接口的第一个方法:applyOptions(Context context, GlideBuilder builder)
。这个方法将GlideBuilder
的对象当作参数,并且是void返回类型,所以你在这个方法里能调用GlideBuilder
可以用的方法。
- .setMemoryCache(MemoryCache memoryCache)
- .setBitmapPool(BitmapPool bitmapPool)
- .setDiskCache(DiskCache.Factory diskCacheFactory)
- .setDiskCacheService(ExecutorService service)
- .setResizeService(ExecutorService service)
- .setDecodeFormat(DecodeFormat decodeFormat)
显而易见,GlideBuilder
对象可以让你访问到Glide的核心部分。使用文中的方法,你可以改变磁盘缓存、内存缓存等等。
我们以后会看更高级的部分,但现在我们选择最简单的改变方式:.setDecodeFormat(DecodeFormat decodeFormat)
。
使用例子:提升Glide的图片质量
Android里有两个方法去解析图片:ARGB8888
和RGB565
。第一个为每个像素采用4 byte表示,后面一个则用2 byte表示。ARG8888
有更高的图片质量,并且能够存储一个alpha通道。当Picasso使用ARGB888
时,Glide默认使用低质量的RGB565
。Glide用户的好消息:你可以通过使用Glide module方法改变解析格式。
你只要简单地实现一个GlideModule
,像之前提到的一样,然后调用builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888)
,并传入正确的枚举型参数。
public class SimpleGlideModule implements GlideModule { @Override public void applyOptions(Context context, GlideBuilder builder) { builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888); } @Override public void registerComponents(Context context, Glide glide) { // nothing to do here }}
如果你能正确地跟上我们的步骤,Glide现在可以使用更高质量的图片解析。另外一个方法改变Glide行为的方式也是一样。代码里的registerComponents()
会有点不一样,以后介绍。
总结
本文中,你已经学会了Glide module的基础知识。你应当能够感受到什么时候会有用,怎样去实现它们。如果你仍然需要更多的信息。看看下面的资源链接。特别地,如果你需要更多关于在库项目或者如何使用ProGuard等实现Glide module的说明,确保再看看那里提供的内容。
既然这是个非常复杂的内容。后面的文章会介绍另一个实际的例子:如何在GlideModule里使用registerComponents()
去实现从自签名HTTPS认证的服务器获取图片。
资源
Github内关于 Glide中的GlideModules的资源。
原文链接:http://www.jianshu.com/p/90b4749e59d2
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
- Glide入门教程——16.用Modules定制Glide
- glide:用Modules定制Glide
- Glide-通过Modules定制Glide
- Glide入门教程——14.用animate()定制动画
- Glide modules
- Glide入门教程——18.Glide Module案例: 自定义缓存
- Glide入门教程——10. 回调:定制view中使用SimpleTarget和ViewTarget
- Glide入门教程——1.入门简介
- Glide入门教程——2.高级加载
- Glide入门教程——7. 缓存基础
- Glide入门教程——8. 请求优先级
- Glide入门教程——9. 缩略图
- Glide入门教程——13.自定义变换
- Glide入门教程——22.系列综述
- Glide入门教程——1.入门简介
- Glide-入门教程
- Glide入门教程
- glide:用animate()定制动画
- java动态代理模式之Cglib动态代理机制
- Glide入门教程——15.整合网络协议栈
- Nodejs监听器
- JAVA知识点梳理 抽象方法 接口 多态 内部类 异常处理
- redis集群 Waiting for the cluster to join 一直等待
- Glide入门教程——16.用Modules定制Glide
- Glide入门教程——17.Glide Module 案例: 接受自签名HTTPS证书
- 六大设计原则
- Glide入门教程——18.Glide Module案例: 自定义缓存
- Java堆内存调优
- Glide入门教程——19.Glide Module 案例: 通过加载自定义大小图片优化
- Openvswitch原理与代码分析(1):总体架构
- Eclipse Window系统更改window窗口,为开发时保护眼睛
- 任务的同步与通信_读书笔记_5