Android Glide加载图片自动适应宽度

本文介绍了一种使用Glide加载图片时保持图片原始比例并自适应ImageView宽度的方法。通过计算图片缩放比例并调整ImageView高度,确保图片完整显示且不失真。此外,还提供了解决Glide加载图片变绿问题的方案。

因为android的imgeview的scaletype都没有可以在不改变原图片比例的情况下自适应宽度的种类。所以用glide加载图片的时候想要自适应宽度需要自己做点处理。

主要的思路就是在获取到图片之后,获得图片的宽dw和高dh,然后根据imageview的宽度vw计算出来imageview的高度vh,再加载图片到imageview中,就可以保持原来图片的比例了。

glide是在listener()方法中传入一个RequestListener来设置当图片资源准备好了以后自定义的操作的。代码如下:

    /**
     * 自适应宽度加载图片。保持图片的长宽比例不变,通过修改imageView的高度来完全显示图片。
     */
    public static void loadIntoUseFitWidth(Context context, final String imageUrl, int errorImageId, final ImageView imageView) {
        Glide.with(context)
                .load(imageUrl)
                .diskCacheStrategy(DiskCacheStrategy.SOURCE)
                .listener(new RequestListener<String, GlideDrawable>() {
                    @Override
                    public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                        if (imageView == null) {
                            return false;
                        }
                        if (imageView.getScaleType() != ImageView.ScaleType.FIT_XY) {
                            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                        }
                        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(errorImageId)
                .error(errorImageId)
                .into(imageView);
    }

使用的话就直接调用

loadIntoUseFitWidth(mContext, url, R.drawable.blank, holder.imageView);

同时碰到了一个glide加载图片变绿的问题,解决方法在这里: Android Glide图片加载框架图片变色变绿解决方法

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值