Glide-androdid三方框架
简述
Glide,就像 Picasso,可以从多个源去加载和显示图片,同时也兼顾缓存和在做图片处理的时候维持一个低内存消耗
使用
1.导包
dependencies {
implementation 'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
}
2.基础属性
1.with(Fragment fragment/Context context),很多AndroidAPI调用,Context是必须的。
2.load(String imageUrl),这个ImageUrl就是我们要传的图片地址。
3.into(ImageView imageView),这个就是我们想把URL 加载到哪个ImageView中。
3.load介绍
参数 说明 | |
.load(String string) | string可以为一个文件路径、uri或者url |
.load(Uri uri) | uri类型 |
.load(File file) | 文件 |
.load(Integer resourceId) | 资源Id,R.drawable.xxx或者R.mipmap.xxx |
.load(byte[] model) | byte[]类型 |
.load(T model) | 自定义类型 |
4.占位符
加载图片自然少不了占位符:
Glide允许用户指定三种不同类型的占位符,分别在三种不同场景使用:
placeholder(占位符) | 占位符是当请求正在执行时被展示的 Drawable 。当请求成功完成时,占位符会被请求到的资源替换。 |
error(错误符) | 在请求永久性失败时展示。 |
fallback(后备回调符) | 在请求的url/model为 null 时展示。 |
5.其他功能
除了占位符之外,glide还具有一些API来指导功能,比如说请求时的一些配置,图片过度的一些效果,对图片的操作,比如裁剪,变换等。
6.使用举例
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView iv1 = findViewById(R.id.iv1);
ImageView iv2 = findViewById(R.id.iv2);
RequestOptions requestOptions = new RequestOptions()
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.fallback(R.drawable.fallback)
.override(100,100); //override指定加载图片大小
Glide.with(this)
.load(R.drawable.ceshi)
.apply(requestOptions)
.into(iv1);
Glide.with(this)
.load(R.drawable.ceshi)
.apply(requestOptions)
.transform(new CircleCrop(),new Rotate(45))
.into(iv2);
}
}
重点:Glide的缓存策略
我们知道,一个高效的图片框架是少不了缓存的,使用缓存可以减少资源的重复加载,提高资源的利用率。在Glide中,缓存分为两大类:内存缓存以及硬盘缓存。具体到缓存类型可以分为4种,一下是官网给出的缓存类型。
活动资源 (Active Resources) (内存) | 现在是否有另一个 View 正在展示这张图片? |
内存缓存 (Memory cache) | 该图片是否最近被加载过并仍存在于内存中? |
资源类型(Resource) | 该图片是否之前曾被解码、转换并写入过磁盘缓存? |
数据来源 (Data) | 构建这个图片的资源是否之前曾被写入过文件缓存? |
看着是不是有点乱,看下面: 当我们加载图片会有以下两种2种方式:
1、是Http/IO ;
2、三级缓存策略
一级缓存:活动缓存 ,可以理解为当前Activity是否持有这个资源,注意这个资源在Activity退出时缓存销毁。
二级缓存:LRU(least recently Used算法)内存缓存 ,注意其在APP应用退出时缓存销毁。
三级缓存:LRU磁盘缓存 ,一直存在吗。
如果还觉得模糊: 我们加载图片时的获取顺序是,首先从活动缓存取,如果没有就再去内存缓存取,如果还没是没有就再去磁盘缓存取,都没有就再去网络下载。
对于缓存,glide默认时开启的,对于缓存的相关配置,是可以配置的。(源码的话占时先搁置一下)