glide为列表加载大小不固定的图片

目标:

        有一个列表,每个item中都有一个 ImageView,要求 ImageView 尺寸等于图片内容尺寸;当图片最大宽度超过屏幕宽度时,ImageView 宽度就固定为屏幕宽度,保持原图宽高比缩放显示图片。

实现如下代码:

RequestOptions mOptions = new RequestOptions()
                //.placeholder(R.mipmap.icon_image_place_holder)
                .error(R.mipmap.icon_image_place_holder)
                .override(mMaxWidth, 3000)
                .priority(Priority.NORMAL);

Glide
                .with(mContext)
                .load(url)
                .apply(mOptions)
                .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) {
                        if (imageView.getScaleType() != ImageView.ScaleType.FIT_XY) {
                            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                        }

                        ViewGroup.LayoutParams params = imageView.getLayoutParams();

                        params.width = Math.min(mMaxWidth, resource.getIntrinsicWidth());
                        params.height = (resource.getIntrinsicHeight() * params.width) / resource.getIntrinsicWidth();
                        imageView.setLayoutParams(params);

                        return false;
                    }
                })
                .into(imageView);

遇到的问题:一开始用的options和加载方法如下,发生第一张图片大小与原图一致,后面加载出来的图片很小,与原图不一致

原因:在动态设置图片大小时,imageView.getLayoutParams() 受到了placeholder图片大小的影响(placeholder图片很小,导致maxwidth远远小于真实大图的宽度)

 

mOptions = new RequestOptions()

    .placeholder(R.mipmap.icon_image_place_holder)

    .error(R.mipmap.icon_image_place_holder)

    .priority(Priority.NORMAL);

int maxWidth = imageView.getMaxWidth();
params.width = Math.min(maxWidth, resource.getIntrinsicWidth());
params.height = (resource.getIntrinsicHeight() * params.width) / resource.getIntrinsicWidth();
imageView.setLayoutParams(params);

 

        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值