Glide 入门到精通之十五 ——用 Glide Module 自定义 Glide
来源:互联网 发布:广州淘宝大学学费多少 编辑:程序博客网 时间:2024/04/28 04:01
http://mrfu.me/2016/02/28/Glide_Customize_Glide_with_Modules/
Glide Modules
Glide module 是一个抽象方法,全局改变 Glide 行为的一个方式。如果你需要访问 GlideBuilder,它要在你要做的地方创建 Glide 实例,这是要做的一种方法。为了定制 Glide,你需要去实现一个 GlideModule 接口的公共类。
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 会扫描 AndroidManifest.xml 为 Glide module 的 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 中被引用,那它不会被加载或被使用。
你去定制 module 的话 Glide 会有这样一个优点:你可以同时声明多个 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 个字节,后者仅为每个像素使用了 2 个字节。ARGB8888 的优势是图像质量更高以及能存储一个 alpha 通道。Picasso 使用 ARGB8888,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() 会看起来有一点不同,我们很快会看到的。
Summary
这篇博客中,你已经学会了 Glide module 的基础。你应该能感觉到他们是有用的,以及你知道怎么实现它们了。如果你仍然需要更多的信息,看看下面的资源链接。特别是如果你需要更多明确的在项目库中如何去使用 Glide module 以及使用 ProGuard,避免混淆的情况,请去看看这些内容。
因为这是一个相当复杂的话题,我们将在下周通过一个实际的例子去实践:如何用一个 GlideModule 的 registerComponents() 方法去从服务端使用 self-signed HTTPS 认证(这不是默认实现的)的方式去接收图片。
- Glide 入门到精通之十五 ——用 Glide Module 自定义 Glide
- Glide 入门到精通之十七——Module 实例:自定义缓存
- Glide 入门到精通之十二 ——自定义转换
- Glide 入门到精通之十八——Module 实例:用自定义尺寸优化加载的图片
- Glide 入门到精通之一——添加Glide
- Glide 入门到精通之一——添加Glide
- Glide 入门到精通之十三 ——用 animate() 自定义动画
- Glide 入门到精通之十六——Module 实例:接受自签名证书的 HTTPS
- Glide 入门到精通之二——图片加载
- Glide 入门到精通之六——缓存基础
- Glide 入门到精通之七——请求优先级
- Glide 入门到精通之八——缩略图
- Glide 入门到精通之六——缓存基础
- Glide 入门到精通之九——SimpleTarget 和 ViewTarget 用于自定义视图类
- Glide 入门到精通之九——SimpleTarget 和 ViewTarget 用于自定义视图类
- Glide入门教程——18.Glide Module案例: 自定义缓存
- Glide 入门到精通之三——占位符和渐现动画
- Glide 入门到精通之四——图片缩放和调整大小
- db2数据库监控脚本
- 智能科普:VR、AR、MR的区别
- 1.Smarty3:概述
- 线程基础知识
- 关闭MediaRecorder录制状态改变时的声音
- Glide 入门到精通之十五 ——用 Glide Module 自定义 Glide
- easyui解析$.parser.parse()的学习,使用地方
- android 系统键盘的控制(显示和隐藏)
- js闭包
- UIStackView入门示例解析
- [Facebook 面试题]Meeting roomII 变形题
- a1006. Sign In and Sign Out (25)
- c++第二次上级报告
- jsp自定义标签及简单实例