Glide 4.x 基本使用

1. 自适应显示
对与ImageView的scaleType 非Matrix的居中显示就不讲解了,因为很简单。这里主要实现android:scaleType="matrix"样式的自适应。
原理:先获取原画的大小,然后获取当前Image的布局尺寸(需要是match_parent才行),之后计算缩放比。

在使用该方法之前尝试过RequestOptions的override方法,逻辑是在onResourceReady里面获取到缩放比,之后计算出缩放之后的高度和宽度并设置override。结果程序会报错,因为onResourceReady是异步的,在调用apply的时候override还是空的。

Glide.with(this).load(url).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) {
                    //加载图片适应窗口大小并且居中显示
                    //设置Img的背景
                    mImg.setImageDrawable(resource);
                    
                    //获取画布的大小
                    int imageWidth = resource.getIntrinsicWidth();
                    int imageHeight = resource.getIntrinsicHeight();

                    //只有当xml layout 配置为match_parent才可以调用nw和nh获取视图的高度和宽度,否则不行
                    int nw = mImg.getWidth();
                    int nh = mImg.getHeight();
                    if(imageWidth > nw){

                        Matrix matrix = new Matrix();
                        //设置放大比例
                        float fScale = nw*1.0f/imageWidth;

                        //计算垂直的居中距离
                        float fTranslateY = 0;
                        imageHeight = (int)(fScale*imageHeight);
                        if(nh > 0 && nh > imageHeight){
                            fTranslateY = (nh - imageHeight)/2;
                        }

                        matrix.postScale(fScale,fScale);
                        matrix.postTranslate(0,fTranslateY);
                        mImg.setImageMatrix(matrix);
                    }
                    return true;
                   }
            }).into(mImg);

2. 从网络加载显示图片(处理占位图,加载错误的时候显示图片)

Glide.with(context)
                    .load(url)
                    .apply(new RequestOptions()
                            .placeholder(R.mipmap.ic_launcher_round)
                    .error(R.mipmap.ic_launcher_round))
                    .into(img);

3. 使用圆角图片

这里有一个大坑:在xml里面千万不要设置background,否则显示有问题

在这里插入图片描述

Glide.with(context)
                    .load(url)
                    .apply(new RequestOptions()
                            .bitmapTransform(new RoundedCorners(30))
                            .placeholder(R.mipmap.ic_launcher_round)
                    .error(R.mipmap.ic_launcher_round))
                    .into(img);

4. 使用圆形图片
在这里插入图片描述

 Glide.with(getActivity())
                    .load(userIconChange.imgUrl)
                    .apply(RequestOptions.bitmapTransform(new CircleCrop())
                            .placeholder(R.mipmap.user_default)
                            .error(R.mipmap.user_default))
                    .into(mUserIcon);

这里只是glide的基本使用,更多可以学习了解Glide缓存机制

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值