Glide 用法指南

# Glide 用法指南


> 说明:由于在最近的项目中用到图片加载框架Glide,但是由于不同的人写的代码有点错综复杂。为了理清Glide的用法,才写了这篇文章。如果有不对的地方,请大家指出,谢谢!
> Glide 是一个图片加载的框架,尤其是大量加载图片,如果在列表中使用,就和它的名字一样纵享丝滑


## 下载或引用方式


```
repositories {
  mavenCentral()
  maven { url 'https://maven.google.com' }
}


dependencies {
    compile 'com.github.bumptech.glide:glide:4.6.1'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1'
}
```
## 使用方式
* 基础用法


```
Glide.with(MainActivity.this).load(mImageUrl).into(mContentImg);
```
* 设置加载尺寸


```
Glide.with(MainActivity.this).load(mImageUrl).override(100,100).into(mContentImg);
```
* 设置加载动画


```
Glide.with(MainActivity.this)
                        .load(mImageUrl)
                        .diskCacheStrategy(DiskCacheStrategy.NONE)
                        .skipMemoryCache(true)
                        .animate(R.anim.glide_anim)
                        .into(mContentImg);
```
* 设置缩放


```
Glide.with(MainActivity.this)
                        .load(mImageUrl)
                        .diskCacheStrategy(DiskCacheStrategy.NONE)
                        .skipMemoryCache(true)
                        .thumbnail(0.1f)
                        .into(mContentImg);
```


* 3种占位符(placeholder、error、fallback)
  * placeholder
> 占位符是当请求正在执行时被展示的 Drawable 。当请求成功完成时,占位符会被请求到的资源替换。如果被请求的资源是从内存中加载出来的,那么占位符可能根本不会被显示。如果请求失败并且没有设置 `error Drawable` ,则占位符将被持续展示。类似地,如果请求的url/model为 `null` ,并且 `error Drawable` 和 `fallback` 都没有设置,那么占位符也会继续显示。

```
Glide.with(MainActivity.this).load(mImageUrl).placeholder(R.drawable.icon).into(mContentImg);
```
  * error
> `error Drawable` 在请求永久性失败时展示。`error Drawable` 同样也在请求的url/model为 `null` ,且并没有设置 `fallback Drawable` 时展示。


```
Glide.with(MainActivity.this).load(mImageUrl).error(R.drawable.ic_launcher_background).into(mContentImg);
```
  * fallback
> `fallback Drawable` 在请求的url/model为 `null` 时展示。设计 `fallback Drawable` 的主要目的是允许用户指示 `null` 是否为可接受的正常情况。例如,一个 `null` 的个人资料 url 可能暗示这个用户没有设置头像,因此应该使用默认头像。然而,`null` 也可能表明这个元数据根本就是不合法的,或者取不到。 默认情况下Glide将 `null` 作为错误处理,所以可以接受 `null` 的应用应当显式地设置一个 `fallback Drawable` 。


```
Glide.with(MainActivity.this).load(mImageUrl).fallback(R.drawable.ic_launcher_background).into(mContentImg);
```
* 缓存
> 默认情况下,Glide 会在开始一个新的图片请求之前检查以下多级的缓存:1.  活动资源 (Active Resources) - 现在是否有另一个 View 正在展示这张图片?2.  内存缓存 (Memory cache) - 该图片是否最近被加载过并仍存在于内存中?3.  资源类型(Resource) - 该图片是否之前曾被解码、转换并写入过磁盘缓存?4.  数据来源 (Data) - 构建这个图片的资源是否之前曾被写入过文件缓存?前两步检查图片是否在内存中,如果是则直接返回图片。后两步则检查图片是否在磁盘上,以便快速但异步地返回图片。如果四个步骤都未能找到图片,则Glide会返回到原始资源以取回数据(原始文件,Uri, Url等)。
>  目前支持的策略允许你阻止加载过程使用或写入磁盘缓存,选择性地仅缓存无修改的原生数据,或仅缓存变换过的缩略图,或是兼而有之。
> 默认的策略叫做 [`AUTOMATIC`],它会尝试对本地和远程图片使用最佳的策略。当你加载远程数据(比如,从URL下载)时,`AUTOMATIC` 策略仅会存储未被你的加载过程修改过(比如,变换,裁剪–译者注)的原始数据,因为下载远程数据相比调整磁盘上已经存在的数据要昂贵得多。对于本地数据,`AUTOMATIC` 策略则会仅存储变换过的缩略图,因为即使你需要再次生成另一个尺寸或类型的图片,取回原始数据也很容易。
  * 设置缓存策略
```
//DiskCacheStrategy.ALL 默认是原始图片、转换后的图片 
//DiskCacheStrategy.NONE 不缓存 
//DiskCacheStrategy.SOURCE 缓存原始图片 
//DiskCacheStrategy.RESULT 缓存转换后的图片 Glide.with(MainActivity.this).load(mImageUrl).diskCacheStrategy(DiskCacheStrategy.RESULT).into(mContentImg);
```
  * 跳过缓存
```
Glide.with(MainActivity.this).load(mImageUrl).skipMemoryCache(true).into(mContentImg);
```
  * 清理缓存
```
Glide.get(MainActivity.this).clearDiskCache(); //清理内存缓存
Glide.get(MainActivity.this).clearMemory();  //清理磁盘缓存
```


###引用文章
> [Glide使用详解(一)](https://blog.csdn.net/shangmingchao/article/details/51125554)
> [Glide v4](https://muyangmin.github.io/glide-docs-cn/doc/transitions.html)

猜你喜欢

转载自blog.csdn.net/tocong2015/article/details/80527359