这里只要给定需要显示图片imageView的宽度 ,则可以通过保持图片的长宽比例不变的方式来自动修改imageView的高度来完全显示图片。
public static voidloadIntoUseFitWidth(Context context,final String imageUrl,int errorImageId,final ImageView imageView) {
//我这里是先获取屏幕的宽高,然后把屏幕的宽设为imageView的宽。
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();
int height = wm.getDefaultDisplay().getHeight();
ViewGroup.LayoutParams params = imageView.getLayoutParams();
params.width= width;
imageView.setLayoutParams(params);
//glide是在listener()方法中传入一个RequestListener来设置当图片资源准备好了以后自定义的操作的。
Glide.with(context)
.load(imageUrl)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.listener(new RequestListener() {
@Override
public boolean onException(Exception e, String model, Target target,booleanisFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target target,boolean isFromMemoryCache,boolean isFirstResource) {
if(imageView==null) {
return false;
}
//首先设置imageView的ScaleType属性为ScaleType.FIT_XY,让图片不按比例缩放,把图片塞满整个View。
if(imageView.getScaleType() != ImageView.ScaleType.FIT_XY) {
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
}
//得到当前imageView的宽度(我设置的是屏幕宽度),获取到imageView与图片宽的比例,然后通过这个比例去设置imageView的高
ViewGroup.LayoutParams params =imageView.getLayoutParams();
int vw =imageView.getWidth() -imageView.getPaddingLeft() -imageView.getPaddingRight();
float scale = (float) vw / (float) resource.getIntrinsicWidth();
int vh = Math.round(resource.getIntrinsicHeight() * scale);
params.height= vh +imageView.getPaddingTop() +imageView.getPaddingBottom();
imageView.setLayoutParams(params);
return false;
}
})
.placeholder(errorImageId)
.error(errorImageId)
.into(imageView);
}