最近公司在做一个商城项目 需要做类似淘宝店的详情页。
根据需求琢磨了一下,首先是要先获得手机屏幕的宽度,然后根据宽度再求出ImageView的高度,并赋值给ImageView。
由于有复用的情况,所以封装成了一个方法供多次使用。
废话不多说,代码中有注释我直接上代码。
/**
*
* @param context context对象
* @param imageUrl 图片网络地址
* @param erroImageId 载入失败图片网络地址
* @param placeImageId 占位图片网络地址
* @param imageView 要载入图片的ImageView对象
*/
public static void loadPicsFitWidth(Context context, final String imageUrl, int erroImageId, int placeImageId, final ImageView imageView) {
Glide.with(context).load(imageUrl).skipMemoryCache(true).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) {
/*
* 在此处填写具体载入逻辑*/
/*
判断imageView对象是否为空
*/
if (imageView == null){
return false;
}
/*
判断imageView的填充方式,如果不是fitxy的填充方式 设置其填充方式
*/
if(imageView.getScaleType()!=ImageView.ScaleType.FIT_XY){
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
}
/*
进行宽度为matchparent时的适应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(placeImageId).error(erroImageId).into(imageView);
}