文章目录
Glide 4概述
Glide,一个被google所推荐的图片加载库,作者是bumptech。这个库被广泛运用在google的开源项目中,包括2014年的google I/O大会上发布的官方app。(PS:众所周知的简介就到此为止了)
Glide 对于 Android SDK 的最低要求是 API level 10
Glide滑行的意思,可以看出这个库的主旨就在于让图片加载变的流畅。现在被广泛使用,当然还是有很多开发者使用Square公司的picasso.
基本使用
要想使用Glide,首先需要将这个库引入到我们的项目当中。新建一个 Test项目,然后在app/build.gradle文件当中添加如下依赖:
依赖
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
还得在AndroidManifest.xml中声明一下网络权限才行:
<uses-permission android:name="android.permission.INTERNET" />
加载图片
现在我们就来尝试一下如何使用Glide来加载图片吧。注意:该方法要在主线程里执行调用。
Glide.with(this).load(url).into(imageView);
参数:
- this:上下文环境
- url:图片地址
- imageView 图片控件
更多加载图片
// 加载本地图片
File file = new File(getExternalCacheDir() + "/image.jpg");
Glide.with(this).load(file).into(imageView);
// 加载应用资源
int resource = R.drawable.image;
Glide.with(this).load(resource).into(imageView);
// 加载二进制流
byte[] image = getImageBytes();
Glide.with(this).load(image).into(imageView);
// 加载Uri对象
Uri imageUri = getImageUri();
Glide.with(this).load(imageUri).into(imageView);
中级用法:
RequestOptions mRequestOptions = RequestOptions.circleCropTransform()
.fitCenter() // ScaleType 看下面解释
.placeholder(R.drawable.ic_launcher_background)//占位图--加载中显示的图片
.error(R.drawable.ic_launcher_foreground)// 错误后显示的图片
.skipMemoryCache(true);//不做内存缓存
Glide.with(this)
.load(imgUrl)
.apply(mRequestOptions)// 应用配置
.listener(new RequestListener<Drawable>() { // 监听器
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
// 加载失败
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
// 加载完成
return false;
}
})
.into(mImg1);
加载带有占位图
Glide.with(this).load(url).placeholder(R.drawable.loading).into(imageView);
加载失败 放置占位符
Glide.with(this).load(url)
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.diskCacheStrategy(DiskCacheStrategy.NONE)//关闭Glide的硬盘缓存机制
.into(imageView);
加载静止图片,默认方式
Glide.with(this).load(url)
.asBitmap()//只加载静态图片,如果是gif图片则只加载第一帧。
.placeholder(R.drawable.loading).into(imageView);
加载动态图片
Glide.with(this).load(url)
.asGif()//加载动态图片,若现有图片为非gif图片,则直接加载错误占位图。
.placeholder(R.drawable.loading).into(imageView);
加载指定大小的图片
Glide.with(this).load(url)
.override(100, 100)//指定图片大小
.placeholder(R.drawable.loading).into(imageView);
添加图片的加载监听器
Glide.with(this)
.load(imgUrl)
.listener(new RequestListener<Drawable>() { // 监听器
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
// 加载失败
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
// 加载完成
return false;
}
})
.into(mImg1);
图片的ScaleType
RequestOptions requestOptions = new RequestOptions()
.centerCrop() // ScaleType 看下面
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true);//不做内存缓存
- CENTER 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示
- CENTER_CROP 按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽
- CENTER_INSIDE 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽
- FIT_CENTER 把图片按比例扩大/缩小到View的宽度,居中显示
- FIT_XY 不按比例缩放图片,目标是把图片塞满整个View。
DiskCacheStrategy
DiskCacheStrategy.NONE: 表示不缓存任何内容。
DiskCacheStrategy.DATA: 表示只缓存原始图片。
DiskCacheStrategy.RESOURCE: 表示只缓存转换过后的图片。
DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
DiskCacheStrategy.AUTOMATIC: 表示让Glide根据图片资源智能地选择使用哪一种缓存策略(默认选项)。
圆角用法
/**
* 圆角图片
*/
public void cornersCleImg() {
//设置图片圆角角度
//通过RequestOptions扩展功能,override:采样率,因为ImageView就这么大,可以压缩图片,降低内存消耗
RoundedCorners roundedCorners = new RoundedCorners(50);
RequestOptions options = RequestOptions.bitmapTransform(roundedCorners)
.override(300, 300);// 指定图片大小 Target.SIZE_ORIGINAL原始尺寸大小
Glide.with(this)
.load(url)
.apply(options)
.into(mImage2);
}
RoundedCorners 构造器里50,代表圆角半径
override: 指定图片的宽高
圆形图片
/**
* 圆形图片
* ScaleType
*/
public void cirCleImg() {
RequestOptions mRequestOptions = RequestOptions.circleCropTransform();
Glide.with(this)
.load(url)
.apply(mRequestOptions)
.into(mImage3);
}