网络加载
通过网络连接加载图像,你应该将INTERNET和ACCESS_NETWORK_STATE权限添加到你的AndroidManifest.xml:
…
…
本地存储
要从DCIM或图片等本地文件夹加载图像,你需要添加READ_EXTERNAL_STORAGE权限:
…
…
要将 Glide 的缓存存储在公共 sdcard 上,您需要使用 WRITE_EXTERNAL_STORAGE权限:
…
…
性能
==
Glide 充分考虑了Android图片加载性能的两个关键方面:
-
1.图片解码速度
-
2.解码图片带来的资源压力
为了让用户拥有良好的App使用体验,图片不仅要快速加载,而且还不能因为过多的主线程I/O或频繁的垃圾回收导致页面的闪烁和抖动现象。
Glide使用了多个步骤来确保在Android上加载图片尽可能的快速和平滑:
-
自动、智能地下采样(downsampling)和缓存(caching),以最小化存储开销和解码次数;
-
积极的资源重用,例如字节数组和Bitmap,以最小化昂贵的垃圾回收和堆碎片影响;
-
深度的生命周期集成,以确保仅优先处理活跃的Fragment和Activity的请求,并有利于应用在必要时释放资源以避免在后台时被杀掉。
Glide基本用法
=========
-
with 传入的可以是当前上下文的对象。
-
load 加载图片,图片可以是本地图片,应用资源的图片也可以是一张网络图片。
-
placeholder 占位符是在请求正在进行时,显示的图片。
-
error 当请求永久失败时,会显示设置图片。
-
into 传入要展示图片的控件。
-
transform 用来完成剪裁(切圆)或对位图应用过滤器,但它也可以用于转换GIF动画,甚至自定义的资源类型。
简单使用
====
在build.gradle中添加依赖
implementation ‘com.github.bumptech.glide:glide:4.12.0’
加载图片
Uri uri = Uri.parse(“https://profile.csdnimg.cn/C/A/6/1_g984160547”);
// String uri = “https://profile.csdnimg.cn/C/A/6/1_g984160547”;
//上面两种写法效果相同
Glide.with(this).load(uri).into(agb.ivInitial);
//应用资源
Glide.with(this).load(R.mipmap.sc1).into(agb.ivAppMipmap);
//画圆
Glide.with(this).load(uri).circleCrop().into(agb.ivCirclecrop);
//增加占位符和加载失败显示图片
Glide.with(this).load(uri).
placeholder(R.mipmap.sc1)
.error(R.mipmap.sc2)
.into(agb.ivInitial);
FutureTarget target= Glide.with(this)
.asBitmap()
.load(uri)
.submit();
new Thread(new Runnable() {
@Override
public void run() {
try {
Bitmap bitmap = target.get();//同步请求
//子线程切主线程更新UI
runOnUiThread(new Runnable() {
@Override
public void run() {
agb.ivOptions.setImageBitmap(bitmap);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
取消加载
Glide.with(this).clear(agb.ivCirclecrop);
注意: 尽管及时取消不必要的加载是很好的实践,但这并不是必须的操作。实际上,当 Glide.with() 中传入的 Activity 或 Fragment 实例销毁时,Glide 会自动取消加载并回收资源。
Generated API
=============
Glide v4 使用 注解处理器 (Annotation Processor) 来生成出一个 API,它允许应用扩展 Glide 的 API并包含各种集成库提供的组件。
Generated API 模式的设计出于以下两个目的:
-
1.集成库可以为 Generated API 扩展自定义选项。
-
2.在 Application 模块中可将常用的方法组打包成一个选项在 Generated API 中使用
虽然以上所说的工作均可以通过手动创建 RequestOptions 子类的方式来完成,但想将它用好更具有挑战,并且降低了 API 使用的流畅性。
使用Generated API(高级用法)
=====================
1.在build.gradle中添加依赖
annotationProcessor ‘com.github.bumptec