问题描述:图片如下:两张图片大小不一样,比例也不一样。imageView的控件大小:540px X 720px (3:4)
(第一张图是3:4的宽高比)(第二张图是7.5:3的宽高比),导致到圆角不一样
代码如下:
public class GlideImageLoader extends ImageLoader {
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
Glide.with(context)
.load(path)
.placeholder(R.mipmap.adversetiment_none)
.error(R.mipmap.adversetiment_none)
.transform(new GlideRoundTransform(mContext, 4))
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
}
}
方法一:解决此问题:代码如下(有一点,必须图片的的比例是一样,是3:4)
public class GlideImageLoader extends ImageLoader {
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
Glide.with(context)
.load(path)
.placeholder(R.mipmap.adversetiment_none)
.error(R.mipmap.adversetiment_none)
//重写图片大小
.override(540,720)
//transfrom的同时传入一个Fitcenter(),先将图片变换为固定的大小
.transform(new FitCenter(mContext),new GlideRoundTransform(mContext, 4))
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
}
}
总结:使用了transfrom的重载方法,在传进去transfrom的同时传入一个Fitcenter(),先将图片变换为固定的大小,然后在此基础上在进行裁剪,再次运行之后所有的项的圆角就看着一般大了。
注意:图片的比例要一致,才能用上面的代码解决问题。
要想图片完全不限制比例,宽高,方法还没有找到。
方法二:还有一个小方法可以实现,不限制比例,宽高,如下图 (圆角没有问题,但图片会按中心裁切,会显示不完整):
代码如下:FitCenter 改成 CenterCrop 就行
.transform(new CenterCrop(mContext),new GlideRoundTransform(mContext, 4))
方法三: glide 版本:4.8.0
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
// 设置glide 圆角
RequestOptions options = new RequestOptions().error(R.drawable.live_def_pic_1);
// 通过transforms,8dp转成px , 工具类
options.transforms(new RoundedCorners(DpPxConverter.dp2px(context, 8)));
Glide.with(context)
.load(bannerFile)
// 设置options
.apply(options)
.into(imageView);
xml文件
<ImageView
android:id="@+id/showadpic"
android:layout_width="270dp"
android:layout_height="wrap_content"
android:layout_gravity="center" />
注意:1、发现xml里给layout_width =260dp 和 layout_height =330dp 给了固定的宽度高度,原始图片是1200px*1520px 此时圆角就不起作用啦。好奇怪啊,为啥?有知道的朋友可以告诉我
2、发现xml里给layout_width =260dp 和 layout_height =wrap_content 给了固定的宽度,高度自适应,此时图片特别小比如 100px*150px,在imageview里显示的图片时不会按260dp来显示,估计是按图片的真实大小显示的,特别的小(圆角是有效果的!)。