详细各位初学者都可能听说过Glide或者已经对其有过一些了解了,下面我主要讲解它的简单使用:
引入
compile 'com.github.bumptech.glide:glide:3.7.0'
权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
使用:
//设置图片
Glide.with(context)//使用Application上下文,Glide请求将不受Activity/Fragment生命周期控制.使用Activity作为上下文,Glide的请求会受到Activity生命周期控制.fragment同理
.load(path)//Glide基本可以load任何可以拿到的媒体资源
// DiskCacheStrategy.SOURCE:缓存原始数据
// DiskCacheStrategy.RESULT:缓存变换(如缩放、裁剪等)后的资源数据
// DiskCacheStrategy.NONE:什么都不缓存
// DiskCacheStrategy.ALL:缓存SOURCE和RESULT
// 默认采用DiskCacheStrategy.RESULT策略
// 对于download only操作要使用DiskCacheStrategy.SOURCE
.diskCacheStrategy(DiskCacheStrategy.ALL)//设置缓存策略
// 优先级越高越优先加载,但不保证所有图片都按序加载
// 枚举Priority.IMMEDIATE
// Priority.HIGH
// Priority.NORMAL
// Priority.LOW
// 默认为Priority.NORMAL
.priority(Priority.HIGH)//指定加载的优先级
.dontAnimate()// 移除所有的动画
//.animate(int animationId)//在异步加载资源完成时会执行该动画
.placeholder(R.drawable.btn_bg1)//设置资源加载过程中的占位Drawable
.error(R.drawable.btn_bg1)//设置load失败时显示的Drawable
// 监听资源加载的请求状态
//但不要每次请求都使用新的监听器,要避免不必要的内存申请,可以使用单例进行统一的异常监听和处理。
.listener(new RequestListener<String, GlideDrawable>() {
//当负载出现异常时调用
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
//当负载成功完成时,立即调用
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
return false;
}
})
//设置是否跳过内存缓存 但不保证一定不被缓存
//.skipMemoryCache(boolean skip)
//重新设置目标的宽高值
.override(200, 400)
//设置资源将被加载到的目标
.into(holder.img);
// 清除内存缓存
// 必须在UI线程中调用
Glide.get(context).clearMemory();
// 清除磁盘缓存
// 必须在后台线程中调用,建议同时clearMemory()
Glide.get(context).clearDiskCache();
图片处理库
compile 'jp.wasabeef:glide-transformations:2.0.0'
使用这个库可以对图片进行一些 裁剪、模糊、滤镜等处理
简单举例:
//圆形裁剪
Glide.with(context)
.load(path)
.bitmapTransform(new CropCircleTransformation(context))
.into(holder.img);
//圆角处理
Glide.with(context)
.load(path)
.bitmapTransform(new RoundedCornersTransformation(context, 30, 0, RoundedCornersTransformation.CornerType.ALL))
.into(holder.img);
//灰度处理
Glide.with(context)
.load(path)
.bitmapTransform(new GrayscaleTransformation(context))
.into(holder.img);