图片的加载框架有很多,如ImageLoader,Picasso,Volley,当然各有优点,不过,我更喜欢谷歌的亲儿子---Glide。
Glide Jar包下载
1.简单使用:
/**
* this ---- context(上下文对象)
* crossFade --- 淡入淡出动画,1000为设置的毫秒数,参数可以为空,默认300毫秒
* placeholder(R.mipmap.aa) --- 占位图片
* transform(new GlideCircleTransform(this)) --- 对图片的处理
* into(image1) --- 放到哪个ImageView中
*/
Glide.with(this)
.load("http://pic39.nipic.com/20140316/14735522_093625408165_2.jpg")
.crossFade(1000)
.placeholder(R.mipmap.aa)
.transform(new GlideCircleTransform(this))
.into(image1);
2.可以对图片进行缩放,
centerCrop()和fitCenter():
1)使用centerCrop是利用图片图填充ImageView设置的大小,如果ImageView的Height是match_parent则图片就会被拉伸填充
Glide.with(context).load(imageUrl).centerCrop().into(imageView);
2)使用fitCenter即缩放图像让图像都测量出来等于或小于 ImageView 的边界范围,该图像将会完全显示,但可能不会填满整个ImageView。
Glide.with(context).load(imageUrl).fitCenter().into(imageView);
Glide.with( context ).load(imageUrl).skipMemoryCache(true).into(imageViewInternet );//跳过内存缓存
Glide.with( context ).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.NONE).into( imageViewInternet );//跳过硬盘缓存
4.设置图片加载的顺序:
Glide.with(context).load(imageUrl).priority( Priority.HIGH).into( imageView);
5.加载圆形图片
//圆形图片
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;
// TODO this could be acquired from the pool too
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 String getId() {
return getClass().getName();
}
}
使用:
Glide.with(this).load("http://pic39.nipic.com/20140316/14735522_093625408165_2.jpg").transform(new GlideRoundTransform(context, 10)).into(imageView);
//圆角图片
public class GlideRoundTransform extends BitmapTransformation {
private static float radius = 0f;
public GlideRoundTransform(Context context) {
this(context, 4);
}
public GlideRoundTransform(Context context, int dp) {
super(context);
this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
}
@Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return roundCrop(pool, toTransform);
}
private static Bitmap roundCrop(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 = 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 String getId() {
return getClass().getName() + Math.round(radius);
}
}
使用:
Glide.with(this).load("http://pic39.nipic.com/20140316/14735522_093625408165_2.jpg").transform(new GlideCircleTransform(context)).into(imageView);
Demo下载