源码分析ImageView中ScaleType设置fitCenter和centerInside的区别

在设置ImageView的scaleType时,有时常常搞不清fitCenter和centerInside的区别,网上资料说的也很模糊,今天就从底层源码看看这俩类型的区别。

查看ImageView的代码,发现有这样的一个ScaleType数组,里面存放了我们所有的可设置的type枚举。

private static final ScaleType[] sScaleTypeArray = {
        ScaleType.MATRIX,
        ScaleType.FIT_XY,
        ScaleType.FIT_START,
        ScaleType.FIT_CENTER,
        ScaleType.FIT_END,
        ScaleType.CENTER,
        ScaleType.CENTER_CROP,
        ScaleType.CENTER_INSIDE
    };

centerInside

搜索ScaleType.CENTER_INSIDE,找到使用枚举处的方法。为了便于理解,我将其他类型的代码都注释掉了,只留下我们要分析的代码。

ImageView.java

private void configureBounds() {
        if (mDrawable == null || !mHaveFrame) {
            return;
        }

        final int dwidth = mDrawableWidth;  //图片的宽度
        final int dheight = mDrawableHeight;  //图片的高度

        final int vwidth = getWidth() - mPaddingLeft - mPaddingRight;  //view的宽度
        final int vheight = getHeight() - mPaddingTop - mPaddingBottom; //view的高度

        ...

        if (dwidth <= 0 || dheight <= 0 || ScaleType.FIT_XY == mScaleType) {
           ...
        } else {
            // We need to do the scaling ourself, so have the drawable
            // use its native size.
            mDrawable.setBounds(0, 0, dwidth, dheight);

            if (ScaleType.MATRIX == mScaleType) {
               ...
            } else if (fits) {
                ...
           
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值