glide是一个图片加载的库
依赖 compile ‘com.github.bumptech.glide:glide:3.7.0’
使用glide很简单就是简简单单的一句1
2
3Glide.with(this)
.load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")
.into(image);
with(Context context):Context支持 Activity Context Fragment FragmentActivity中四种类型
load():支持网络资源、assets资源、Resources资源、File资源、Uri资源、字节数组
into():在哪个imageview中显示
glide可以加载的资源类型1
2
3
4
5Glide.with(this).load("http://pic9/258/a2.jpg").into(iv); //网络资源
Glide.with(this).load("file:///xxx.jpg").into(iv); //file文件
Glide.with(this).load(R.mipmap.ic_launcher).into(iv); //资源文件
Glide.with(this).load(uri).into(iv); //uri资源
Glide.with(this).load(byte[]).into(iv); //byte数组
不仅如此glide还可以加载动静态的gif1
2Glide.with(this).load(imageUrl).asBitmap().into(iv); //静态gif 其实就是一张图片
Glide.with(this).load(imageUrl).asGif().into(iv); //动态gif
还可以加载本地的一个视频1
2String filePath = "/storage/emulated/0/Pictures/example_video.mp4"; //视频路径
Glide.with(context).load(Uri.fromFile(new File( filePath))).into(iv);
我们有时候加载网络图片可能会失败,这时候我们可以设置一个加载失败的图片1
2
3
4Glide.with(this)
.load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")
.error("R.drawable.error") //加载错误的图片
.into(image)
当图片真在加载的时候如果什么都没有,会让用户感觉非常不好,这是我们可以设置一个正在加载时显示的图片1
2
3
4
5Glide.with(this)
.load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")
.error("R.drawable.error") //加载错误或失败后显示的图片
.placeholder(R.drawable.load) //正在加载时试显示的图片
.into(image)
还可以设置先加载缩略图1
2
3
4
5
6Glide.with(this)
.load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")
.error("R.drawable.error") //加载错误或失败后显示的图片
.placeholder(R.drawable.load) //正在加载时试显示的图片
.thumbnail(0.1f) //加载缩略图
.into(image)
我们还可以设置加载的动画,这个动画默认是淡入淡出1
2
3
4
5
6
7
8
9Glide.with(this)
.load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")
.error("R.drawable.error") //加载错误或失败后显示的图片
.placeholder(R.drawable.load) //正在加载时试显示的图片
.thumbnail(0.1f) //加载缩略图
.crossFade(1000) // 可设置时长,默认“300ms”
//.animate(R.anim.fade_in)设置自定义的动画
//.dontAnimate() 可以去除动画
.into(image)
有时候我们需要去设置图的大小,除了自己去设置,Glide还给我们提供了两种缩放方法1
2
3
4
5
6
7
8
9Glide.with(this)
.load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")
.error("R.drawable.error") //加载错误或失败后显示的图片
.placeholder(R.drawable.load) //正在加载时试显示的图片
.thumbnail(0.1f) //加载缩略图
.override(width,height) //图片显示的分辨率 ,像素值 可以转化为DP再设置
//.centerCrop() CenterCrop 即缩放图像至填充到 ImageView内,裁剪额外的部分。ImageView会完全填充,但图像可能不会显示不全
//.fitCenter() fitCenter() 图片会按照imageview长宽中最小的边界作为依据,按比例缩放图像。该图像将会完全显示,但可能不会填满整个 ImageView。
.into(image)
Glide还给我们提供了缓存的策略1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20Glide.with(this)
.load("http://nm/photo/1f/1f7a.jpg")
.skipMemoryCache(true) //跳过缓存
.into(iv);
//设置缓存
Glide.with(this)
.load("http://nm/photo/1f/1f7a.jpg")
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(iv);
//DiskCacheStrategy.ALL 缓存源资源和转换后的资源
//DiskCacheStrategy.NONE 不做任何磁盘缓存
//DiskCacheStrategy.RESULT 缓存转换后的资源
//DiskCacheStrategy.SOURCE 缓存源资源
/**还提供了清理缓存的方法**/
Glide.get(this).clearDiskCache();//在子线程中进行
Glide.get(this).clearMemory();//可以在主线程
//获取文件缓存的路径,拿到路径之后我们就能够加载出缓存的图片
Glide.with(context).load(imgUrl).downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get();
还可以自己设置缓存的路径1
2
3
4
5
6
7
8
9
10
11
12
13
14public class GlideModuleConfig implements GlideModule {
public void applyOptions(Context context, GlideBuilder builder) {
//内部存储/Android/data/包名/cache/glide-images
builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, "glide-images", 2 * 1024 * 1024));
//将默认的RGB_565效果转换到ARGB_8888
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
}
public void registerComponents(Context context, Glide glide) {
//不做处理
}
}
然后在配置文件中配置,application节点下1
2
3<meta-data
android:name="包名.widget.GlideModuleConfig"
android:value="GlideModule" />
同时我们还可设置图片的模糊度,像下面这样,这时我们需要在另外导入一个依赖,这是一个模糊的依赖
依赖compile ‘jp.wasabeef:glide-transformations:2.0.1’

1 | Glide.with(this) |
利用这个库还可以进行裁剪圆角等1
2
3
4
5
6
7
8
9
10//原图基础上变换设置圆形图
Glide.with(context).load(url).bitmapTransform(new CropCircleTransformation(this)).into(iv);
//原图基础上变换成圆图 +毛玻璃(高斯模糊)
Glide.with(this).load(url).bitmapTransform(new BlurTransformation(this, 25), new CropCircleTransformation(this)).into(iv);
//y圆角
//如果是四周已经是圆角则RoundedCornersTransformation.CornerType.ALL
Glide.with(this)
.load(url)
.bitmapTransform(new RoundedCornersTransformation(this, 30, 0, RoundedCornersTransformation.CornerType.BOTTOM))
.into(iv);
同时我们还可以对加载进行监听,注意:如果需要加载完成后设置图片透明度为0,则不能设置.placeholder(R.drawable.url),否则达不到你想要的效果。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16Glide.with(this)
.load("http://ww4.sinaimg.cn/large/610dc034gw1f96kp6faayj20u00jywg9.jpg")
.listener(new RequestListener<String, GlideDrawable>() {
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
Toast.makeText(getApplicationContext(),"资源加载异常",Toast.LENGTH_SHORT).show();
return false;
}
//这个用于监听图片是否加载完成
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
Toast.makeText(getApplicationContext(),"图片加载完成",Toast.LENGTH_SHORT).show();
return false;
}
})
.into(image)