问题的描述
之前用recyclerView使用瀑布流的时候,往下滑的时候,然后再滑会顶部的时候,发现前几项的图片变形了。
看下图对比。
显示正常
显示不正常的
问题分析
1.后来上网搜索了下,应该是gilde图片库的问题,如果是使用imageview的centerCrop属性,应该是宽高计算出了问题,导致图片显示变形。
网上给出了禁用加载动画之类的方法都无法解决这个瀑布流变形的问题。
2.我后来尝试使用fitXY属性,发现就没有这个变形的问题,但是fitXY的话,如果view的宽高和图片宽高不一致的话,图片就会压缩变形了。
原来的代码写法是这样的,主要给出加载图片的代码
ImageView ivImgUrl = holder.getView(R.id.ivImgUrl);
ivImgUrl.getLayoutParams().height = FloatUtil.getPicSize(width, articleV2.getSize());
Glide.with(activity)
.load(imageUrl)
.error(R.drawable.default_cover)
.into(ivImgUrl);
因为图片的高度是动态设置的,(瀑布流一般都是这样的),我猜测是ImageView传入的高度不对导致的,我设置了ImageView的高度,立马调用glide的代码,此时不能立马获取正确的高度
解决办法
然后我尝试修改了这种写法,就是等图片高度变化后,再调用glide的代码,然后问题就得以解决了.
final ImageView ivImgUrl = holder.getView(R.id.ivImgUrl);
ivImgUrl.getLayoutParams().height = FloatUtil.getPicSize(width, articleV2.getSize());
ivImgUrl.post(new Runnable() {
@Override
public void run() {
ImgLoader.display(activity, articleV2.getImgUrl(), ivImgUrl);
}
});
注意:不能使用glide的placeholder,图片动态变化高度的情况会出问题。
总结
没有深入到gilde的源码去研究问题的原因,总归有点片面。欢迎提出更好的解决的办法。