1、添加依赖
compile 'com.github.bumptech.glide:glide:3.6.1'
2、使用(网络图片+本地图片)
圆角效果不显示、以及刷新后图片变形问题,已在下方代码中有所解释:
public class GlideUtils {
public static final int FIT_CENTER=0;//默认
public static final int FIT_XY=1;
public static final int CENTER_CROP=2;
public static final int MATRIX=3;
/**
* 加载网络图片
* @param mContext
* @param url 图片地址
* @param view 承载View
* @param scaleType 显示方式
* --- MATRIX 、FIT_XY、CENTER_CROP
* @param btf 设置圆角等
*/
public static void loadPic(Context mContext, String url, final ImageView view, int scaleType, BitmapTransformation btf){
BitmapTypeRequest<String> transform = Glide.with(mContext)
.load(url)
.asBitmap();//图不直接给控件,而是让控件拿到Bitmap后再操作。***解决第一次加载时圆角不显示问题,以及刷新后图片变形问题(该问题可能不是每次都出现)***
// transform .centerCrop()
// transform .transform(btf) //Glide4.0版本 centerCrop()和transform()共存时,centerCrop()会覆盖transform()。最明显的是圆角没有了
// 可以使用 transform.transform(new CenterCrop(mContext),btf);实现
switch (scaleType){
case MATRIX:
case FIT_XY:
if (btf!=null)
transform.transform(btf);
break;
case CENTER_CROP:
if (btf!=null){
transform.transform(new CenterCrop(mContext),btf);
}else {
transform .centerCrop();
}
break;
case FIT_CENTER:
if (btf!=null){
transform.transform(new FitCenter(mContext),btf);
}else {
transform .fitCenter();
}
break;
}
// .skipMemoryCache(false).diskCacheStrategy(DiskCacheStrategy.RESULT)//缓存:内存缓存>>本地缓存>>网络缓存
transform.placeholder(R.drawable.placeholder)//设置占位图,在加载之前显示
.error(R.drawable.placeholder)
.into(view);
}
/**
* 加载本地图片
* @param mContext
* @param resID 图片地址
* @param view 承载View
* @param scaleType 显示方式
* --- MATRIX 、FIT_XY、CENTER_CROP
* @param btf 设置圆角等
*/
public static void loadPic(Context mContext, int resID, final ImageView view, int scaleType, BitmapTransformation btf){
BitmapTypeRequest<Integer> transform = Glide.with(mContext)
.load(resID)
.asBitmap();//图不直接给控件,而是让控件拿到Bitmap后再操作。***解决第一次加载时圆角不显示问题,以及刷新后图片变形问题(该问题可能不是每次都出现)***
// transform .centerCrop()
// transform .transform(btf) //Glide4.0版本 centerCrop()和transform()共存时,centerCrop()会覆盖transform()。最明显的是圆角没有了
// 可以使用 transform.transform(new CenterCrop(mContext),btf);实现
switch (scaleType){
case MATRIX:
case FIT_XY:
if (btf!=null)
transform.transform(btf);
break;
case CENTER_CROP:
if (btf!=null){
transform.transform(new CenterCrop(mContext),btf);
}else {
transform .centerCrop();
}
break;
case FIT_CENTER:
if (btf!=null){
transform.transform(new FitCenter(mContext),btf);
}else {
transform .fitCenter();
}
break;
}
// .skipMemoryCache(false).diskCacheStrategy(DiskCacheStrategy.RESULT)//缓存:内存缓存>>本地缓存>>网络缓存
transform.placeholder(R.drawable.placeholder)//设置占位图,在加载之前显示
.error(R.drawable.placeholder)
.into(view);
}
}
如果想实现圆角等效果,使用transfrom(BitmapTransformation bitmapTransformation)实现,我们要协议了类继承BitmapTransformation。
(3)拓展 -- 圆角效果
public class GlideRoundRectBitmapTransformation extends BitmapTransformation {
int radius=25;
public GlideRoundRectBitmapTransformation(Context context) {
super(context);
}
public GlideRoundRectBitmapTransformation(Context context,int radius) {
super(context);
this.radius=radius;
}
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return roundCorner(pool, toTransform);
}
private Bitmap roundCorner(BitmapPool pool, Bitmap toTransform) {
if (toTransform == null) return null;
Bitmap result = pool.get(toTransform.getWidth(), toTransform.getHeight(), Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(toTransform.getWidth(), toTransform.getHeight(), Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(toTransform, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
RectF rectF = new RectF(0f, 0f, toTransform.getWidth(), toTransform.getHeight());
canvas.drawRoundRect(rectF, radius, radius, paint);
Log.d("Glide半径大小",radius+"");
return result;
}
@Override
public String getId() {
return getClass().getName() + Math.round(radius);
}
}