- 依赖 implementation'com.github.bumptech.glide:glide:4.8.0'
1. Glide将缓冲分为连两个模块
①. 内存缓存:防止应用重复将图片读取到内存中
//禁用内存缓存功能
Glide.with(this) .load(url) .skipMemoryCache(true) .into(imageView);
②. 硬盘缓冲:防止应用重复从网络或其他地方下载和读取数据
//调用diskCacheStrategy()方法并传入DiskCacheStrategy.NONE,就可以禁用掉Glide的硬盘缓存功能了
Glide.with(this) .load(url) .diskCacheStrategy(DiskCacheStrategy.NONE) .into(imageView);
2. diskCacheStrategy()方法 的五种参数
DiskCacheStrategy.NONE: 表示不缓存任何内容。
DiskCacheStrategy.DATA: 表示只缓存原始图片。
DiskCacheStrategy.RESOURCE: 表示只缓存转换过后的图片。
DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。 DiskCacheStrategy.AUTOMATIC: 表示让Glide根据图片资源智能地选择使用哪一种缓存策略(默认选项).
3. Glide的使用:
//本地
//Glide.with(this).load(localUrl).into(iv_img);
//资源
//Glide.with(this).load(R.mipmap.ic_launcher).into(iv_img);
RequestOptions requestOptions =new RequestOptions();
//占位符
//(在图片还没有加载出来时 放一张图片)
//requestOptions.placeholder(R.mipmap.ic_launcher);
//错误占位符(路径错误时 所加载出来的图片)
requestOptions.error(R.drawable.ic_launcher_background);
//指定图片大小
//requestOptions.override(100, 100);
//圆形图片
//requestOptions.circleCrop();
//圆角图片
RoundedCorners corners =new RoundedCorners(100);
requestOptions.transform(corners);
//静止任何转换
//requestOptions.dontTransform();
//内存缓冲
//requestOptions.skipMemoryCache(false);
//硬盘
//requestOptions.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC);
Glide.with(this)
//.asGif()//加载动态图,如果有图片不是GIF,则直接加载占位图
// .asBitmap()//将动图转换为静图(如果是Gif则只加载第一帧)
.load(localUrl)
.apply(requestOptions)
.into(iv_img);
}
4. 实现下载图片并且展示下载图片
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_bownload:
download();
break;
case R.id.btn_doenload_show:
//显示下载好的图片
Glide.with(MainActivity.this)
.load(file)
.into(iv_img);
break;
}
}
private void download() {
new Thread(new Runnable() {
@Override
public void run() {
FutureTarget fileFutureTarget = Glide
.with(MainActivity.this)
.load(netUrl)
//下载图片
.downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL);
try {
//下载好图片的路径
file = fileFutureTarget.get();
Log.e("TAG","路径" +file.getAbsolutePath());
}catch (ExecutionException e) {
e.printStackTrace();
}catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}