glide3升级到glide4.*版本,使用上有一些变化,下面一个常用的简单加载图片工具类:
/**
* 图片加载工具类
* Created by Administrator on 2017/12/5 0005.
*/
public class ImageLoaderUtils {
private static final String TAG = "ImageLoaderUtils";
/**
* 圆角图片加载
* @author leibing
* @createTime 2016/8/15
* @lastModify 2016/8/15
* @param context 上下文
* @param imageView 图片显示控件
* @param url 图片链接
* @param defaultImage 默认占位图片
* @param errorImage 加载失败后图片
* @param radius 图片圆角半径
* @return
*/
public static void load(Context context, ImageView imageView, String url, int defaultImage,
int errorImage , int radius){
//RequestOptions 设置请求参数,通过apply方法设置
RequestOptions options = new RequestOptions()
// 但不保证所有图片都按序加载
// 枚举Priority.IMMEDIATE,Priority.HIGH,Priority.NORMAL,Priority.LOW
// 默认为Priority.NORMAL
// 如果没设置fallback,model为空时将显示error的Drawable,
// 如果error的Drawable也没设置,就显示placeholder的Drawable
.priority(Priority.NORMAL) //指定加载的优先级,优先级越高越优先加载,
.placeholder(defaultImage)
.error(errorImage)
// 缓存原始数据
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.centerCrop()
.transform(new CornersTranform(context, radius));
// 图片加载库采用Glide框架
Glide.with(context).load(url).apply(options)
.transition(new DrawableTransitionOptions().crossFade())
.into(imageView);
}
/**
* 加载resoures下的文件
* @param context
* @param imageView
* @param url
* @param defaultImage
* @param errorImage
*/
public static void loadImgId(Context context, final ImageView imageView, int url, int defaultImage,
int errorImage, int radius) {
RequestOptions options = new RequestOptions()
// 但不保证所有图片都按序加载
// 枚举Priority.IMMEDIATE,Priority.HIGH,Priority.NORMAL,Priority.LOW
// 默认为Priority.NORMAL
// 如果没设置fallback,model为空时将显示error的Drawable,
// 如果error的Drawable也没设置,就显示placeholder的Drawable
.priority(Priority.NORMAL) //指定加载的优先级,优先级越高越优先加载,
.placeholder(defaultImage)
.error(errorImage)
// 缓存原始数据
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.centerCrop()
.transform(new CornersTranform(context, radius));
// 图片加载库采用Glide框架
Glide.with(context).load(url)
.apply(options)
.transition(new DrawableTransitionOptions().crossFade())
.into(imageView);
}
/**
* 加载圆形头像
* @param context
* @param imageView
* @param url
* @param defaultImage
* @param errorImage
*/
public static void loadCircle(Context context, final ImageView imageView, String url, int defaultImage,
int errorImage) {
RequestOptions options = new RequestOptions()
// 但不保证所有图片都按序加载
// 枚举Priority.IMMEDIATE,Priority.HIGH,Priority.NORMAL,Priority.LOW
// 默认为Priority.NORMAL
// 如果没设置fallback,model为空时将显示error的Drawable,
// 如果error的Drawable也没设置,就显示placeholder的Drawable
.priority(Priority.NORMAL) //指定加载的优先级,优先级越高越优先加载,
.dontAnimate() //防止设置placeholder导致第一次不显示网络图片,只显示默认图片的问题
.placeholder(defaultImage)
.error(errorImage)
// 缓存原始数据
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.centerCrop()
.transform(new GlideCircleTransform(context));
// 图片加载库采用Glide框架
Glide.with(context).load(url)
.apply(options)
.transition(new DrawableTransitionOptions().crossFade())
.into(new SimpleTarget<Drawable>() {
@Override
public void onResourceReady(Drawable resource, Transition<? super Drawable> transition) {
imageView.setImageDrawable(resource);
}
});
}
}
圆角图片处理类:
/**
* glide处理圆角图片
* Created by Administrator on 2017/12/13 0013.
*/
public class CornersTranform extends BitmapTransformation {
private float radius;
public CornersTranform(Context context) {
super(context);
radius = 10;
}
public CornersTranform(Context context, float radius) {
super(context);
this.radius = radius;
}
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return cornersCrop(pool, toTransform);
}
private Bitmap cornersCrop(BitmapPool pool, Bitmap source) {
if (source == null) return null;
Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
if (result != null && !result.isRecycled()){
result.recycle();
result = null;
}
if (result == null) {
result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
canvas.drawRoundRect(rectF, radius, radius, paint);
return result;
}
@Override
public void updateDiskCacheKey(MessageDigest messageDigest) {
}
}
圆形图片处理:
/**
* glide加载圆形图片
* Created by Administrator on 2018/2/3 0003.
*/
public class GlideCircleTransform extends BitmapTransformation{
public GlideCircleTransform(Context context) {
super(context);
}
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return circleCrop(pool, toTransform);
}
private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
if (source == null) return null;
int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;
Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);
Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
float r = size / 2f;
canvas.drawCircle(r, r, r, paint);
return result;
}
@Override
public void updateDiskCacheKey(MessageDigest messageDigest) {
}
}
使用时只需要调用相应的图片加载方法:
ImageLoaderUtils.load(this, holder.ivRecommendImg, url, R.drawable.normal_loading, R.drawable.normal_error, 20);
页面销毁时, 在onstop方法中取消图片加载请求:
@Override
public void onStop() {
super.onStop();
Glide.with(this).pauseRequests();
}
在onresume方法中恢复图片加载请求:
@Override
public void onResume() {
super.onResume();
Glide.with(this).resumeRequests();
}