Glide加载图片缩放模式

该博客介绍了Glide在加载图片时的缩放模式,特别是针对不同比例图片如何进行拉伸适应固定高度的需求。Glide通过Downsampler类计算缩放比例,提供了AT_LEAST(默认,按比例差距小的边缩放)、AT_MOST(按比例差距大的边缩放)和NONE(不缩放,保持原始比例)三种模式。在使用Glide加载时,可以通过approximate()、atMost()和asIs()方法来选择对应的缩放策略。然而,Downsampler的downsample方法是私有的,无法自定义新的缩放策略。

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

Glide加载图片缩放模式

前不久做一个水平图片滑动列表选择,效果类似于QQ发送图片。因为图片的长宽比不一致,而高度是固定的,所以就要对图片进行特殊拉伸。所以就看了下Glide拉伸这一块的源码。废话不多说了,下面开始总结。

平时我们用BitmapFactory进行加载较大图片时候,往往先通过inJustDecodeBounds方式解析出图片宽高,再结合ImageView宽高计算inSampleSize(即缩放比例),然后再“按需”加载bitmap,并显示出来。

那在Glide中是如何实现拉伸的呢?

其实Glide中实现也是上述思路,只是封装起来了。Glide负责计算缩放比例并decode的类是Downsampler,其中的getRoundedSampleSize 就负责计算缩放比例的。

public abstract class Downsampler implements BitmapDecoder<InputStream>{
   
   
    //这个方法decode图片得到bitmap,其实最终也会调用BitmapFactory.decode()方法
    @Override
    public Bitmap decode(InputStream is, BitmapPool pool, int outWidth, int outHeight, DecodeFormat decodeFormat) {

        ...省略...

        //这里计算缩放比例
        final int sampleSize = getRoundedSampleSize(degreesToRotate, inWidth, inHeight, outWidth, outHeight);
      //正式解析
       final Bitmap downsampled = downsampleWithSize(invalidatingStream, bufferedStream, options, pool, inWidth, inHeight, sampleSize,decodeFormat);

         ...省略...
    }

   ...

  //计算缩放比例
   private int getRoundedSampleSize(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值