glide在瀑布流中图片变形的问题

本文探讨了在使用RecyclerView实现瀑布流布局时遇到的图片显示变形问题。通过分析,发现此问题与Glide图片加载库及ImageView尺寸计算有关。文中提供了一种解决方案,即延迟加载图片,确保ImageView尺寸正确后再进行加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题的描述

之前用recyclerView使用瀑布流的时候,往下滑的时候,然后再滑会顶部的时候,发现前几项的图片变形了。
看下图对比。
显示正常
Alt text
显示不正常的
Alt text

问题分析

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的源码去研究问题的原因,总归有点片面。欢迎提出更好的解决的办法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值