1. 自适应显示
对与ImageView的scaleType 非Matrix的居中显示就不讲解了,因为很简单。这里主要实现android:scaleType="matrix"
样式的自适应。
原理:先获取原画的大小,然后获取当前Image的布局尺寸(需要是match_parent才行),之后计算缩放比。
在使用该方法之前尝试过RequestOptions的override方法,逻辑是在onResourceReady里面获取到缩放比,之后计算出缩放之后的高度和宽度并设置override。结果程序会报错,因为onResourceReady是异步的,在调用apply的时候override还是空的。
Glide.with(this).load(url).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) {
//加载图片适应窗口大小并且居中显示
//设置Img的背景
mImg.setImageDrawable(resource);
//获取画布的大小
int imageWidth = resource.getIntrinsicWidth();
int imageHeight = resource.getIntrinsicHeight();
//只有当xml layout 配置为match_parent才可以调用nw和nh获取视图的高度和宽度,否则不行
int nw = mImg.getWidth();
int nh = mImg.getHeight();
if(imageWidth > nw){
Matrix matrix = new Matrix();
//设置放大比例
float fScale = nw*1.0f/imageWidth;
//计算垂直的居中距离
float fTranslateY = 0;
imageHeight = (int)(fScale*imageHeight);
if(nh > 0 && nh > imageHeight){
fTranslateY = (nh - imageHeight)/2;
}
matrix.postScale(fScale,fScale);
matrix.postTranslate(0,fTranslateY);
mImg.setImageMatrix(matrix);
}
return true;
}
}).into(mImg);
2. 从网络加载显示图片(处理占位图,加载错误的时候显示图片)
Glide.with(context)
.load(url)
.apply(new RequestOptions()
.placeholder(R.mipmap.ic_launcher_round)
.error(R.mipmap.ic_launcher_round))
.into(img);
3. 使用圆角图片
这里有一个大坑:在xml里面千万不要设置background,否则显示有问题
Glide.with(context)
.load(url)
.apply(new RequestOptions()
.bitmapTransform(new RoundedCorners(30))
.placeholder(R.mipmap.ic_launcher_round)
.error(R.mipmap.ic_launcher_round))
.into(img);
4. 使用圆形图片
Glide.with(getActivity())
.load(userIconChange.imgUrl)
.apply(RequestOptions.bitmapTransform(new CircleCrop())
.placeholder(R.mipmap.user_default)
.error(R.mipmap.user_default))
.into(mUserIcon);
这里只是glide的基本使用,更多可以学习了解Glide缓存机制