Glide 3
添加依赖
Glide
OR glide-transformations
选其一
Glide
1 | //Glide |
glide-transformations
该库依赖于Glide,是处理图片的库,会自动下载Glide
1 | //glide-transformations |
简单使用
1 | Glide.with(this).load(R.mipmap.touxiang).into(head_imageview); |
设置圆角
引用
1 | import com.bumptech.glide.Glide |
Kotlin
1 | val roundedCorners = RoundedCorners(6) |
禁用缓存
常用与更新用户头像,但是头像地址不变的情况
Kotlin
1 | var options = RequestOptions() |
Glide 4
对比
相比于Glide 3
- 将配置全部设置到了一个RequestOptions里面,并使用apply方法,应用这些配置信息
- 添加一个compiler的库,这个库是用于生成Generated API的,可以简化方法的调用
引用
Min Sdk Version - 使用 Glide 需要 min SDK 版本 API 14 (Ice Cream Sandwich) 或更高。
Compile Sdk Version - Glide 必须使用 API 27 (Oreo MR1) 或更高版本的 SDK 来编译。
Support Library Version - Glide 使用的支持库版本为 27。
如果你需要使用不同的支持库版本,你需要在你的 build.gradle
文件里去从 Glide 的依赖中去除 com.android.support
。例如,假如你想使用 v26 的支持库:
1 | dependencies { |
Java
1 | dependencies { |
Kotlin
如果你在 Kotlin 编写的类里使用 Glide 注解,你需要引入一个 kapt
依赖,以代替常规的 annotationProcessor
依赖:
1 | dependencies { |
请注意,你还需要在你的 build.gradle
文件中包含 kotlin-kapt
插件:
1 | apply plugin: 'kotlin-kapt' |
权限
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android" |
proguard
如果你有使用到 proguard,那么请把以下代码添加到你的 proguard.cfg
文件中:
1 | -keep public class * implements com.bumptech.glide.module.GlideModule |
普通方式调用
加载图片
1 | RequestOptions options = new RequestOptions() |
缓存策略
Glide 4.x版本的缓存选项,有下面5种:
- DiskCacheStrategy.NONE: 表示不缓存任何内容。
- DiskCacheStrategy.DATA: 表示只缓存原始图片。
- DiskCacheStrategy.RESOURCE: 表示只缓存转换过后的图片。
- DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
- DiskCacheStrategy.AUTOMATIC: 表示让Glide根据图片资源智能地选择使用哪一种缓存策略(默认选项)。
Glide 3中的语法是先load()再asBitmap()的,而在Glide 4中是先asBitmap()再load()的
Glide 4中又新增了asFile()方法和asDrawable()方法,分别用于强制指定文件格式的加载和Drawable格式的加载
文件下载
Glide 4中又新增了submit()/submit(int width, int height)
方法,这个方法其实就是对应的Glide 3中的downloadOnly()
方法
1 | public void downloadImage() { |
图片处理
Glide 4.x还提供了现成的图片转换的API:
1 | RequestOptions options = new RequestOptions().centerCrop(); |
如果需要使用一些特殊转换,需要调用
1 | RequestOptions options = new RequestOptions().transform(); |
配合下面这个库:
1 | dependencies { |
就可以进行方便的进行图片转换。使用示例如下:
1 | String url = "https://up.sc.enterdesk.com/edpic/cf/3e/84/cf3e8415383e065b0fe8938f73bedf70.jpg"; |
GlideApp方式调用
Generated API是Glide 4中全新引入的一个功能,它的工作原理是使用注解处理器 (Annotation Processor) 来生成出一个API,在Application模块中可使用该流式API一次性调用到RequestBuilder
,RequestOptions
和集成库中所有的选项。
简单说,就是Glide 4仍然给我们提供了一套和Glide 3一模一样的流式API接口,照顾老版本的用户的使用习惯。
只不过需要把Glide关键字替换成GlideApp关键字。
如下所示:
1 | GlideApp.with(this) |
不过,有可能你的IDE中会提示找不到GlideApp这个类。这个类是通过编译时注解自动生成的,但是要先先准备代码中,有一个自定义的模块,并给这个模块加上 @GlideModule 注解。如下所示:
1 |
|
然后在Android Studio中点击菜单栏Build
=> Rebuild Project
,GlideApp这个类就会自动生成了。
自定义API
下面我来具体举个例子
比如说我们要求项目中所有图片的缓存策略全部都要缓存原始图片,那么每次在使用Glide加载图片的时候,都去指定diskCacheStrategy(DiskCacheStrategy.DATA)
这么长长的一串代码,确实是让人比较心烦。
这种情况我们就可以去定制一个自己的API了,定制自己的API需要借助 @GlideExtension
和 @GlideOption
这两个注解。创建一个我们自定义的扩展类
代码如下所示:
1 |
|
注意自定义API的方法都必须是静态方法,而且第一个参数必须是RequestOptions
,后面你可以加入任意多个你想自定义的参数。在cacheSource()
方法中,我们仍然还是调用的diskCacheStrategy(DiskCacheStrategy.DATA)
方法,所以说cacheSource()就是
一层简化API的封装而已。
然后在Android Studio中点击菜单栏Build -> Rebuild Project,神奇的事情就会发生了,你会发现你已经可以使用这样的语句来加载图片了:
1 | GlideApp.with(this) |