安卓 ImageView 的 scaleType 正确解释

作者:vkvi 来源:ITPOW(原创) 日期:2018-3-31

ImageView 布局时,有个 scaleType。

网上关于 scaleType 的解释有很多是不正确的。

虽然本文没图,显得也有点乱,但是讲解是正确的。

属性值解释

matrix不放大缩小图片,图片左上角对应 ImageView 左上角,超出部分就剪裁

center不放大缩小图片,图片中心点对应 ImageView 中心点超出部分就剪裁

centerCrop等比例放大缩小图片,直到有一边等于 ImageView 相应边,另一边大于或等于相应边。

centerInside等比例缩小图片,直到有一边等于 ImageView 相应边,另一边小于或等于相应边。

fitXY不等比例放大缩小图片,使图片的宽度等于 ImageView 的宽度,使图片的高度等于 ImageView 的高度。非常简单粗暴。

fitStart等比例放大缩小图片,直到有一边等于 ImageView 相应边,另一边小于或等于相应边,图片左上角对应 ImageView 左上角

fitCenter等比例放大缩小图片,直到有一边等于 ImageView 相应边,另一边小于或等于相应边,图片中心点对应 ImageView 中心点。与 centerInside 不同的是:centerInside 只会缩小照片,不会放大照片。

fitEnd等比例放大缩小图片,直到有一边等于 ImageView 相应边,另一边小于或等于相应边,图片右下角对应 ImageView 右下角

上述的“相应边”是指宽对宽、高对高,即图片的宽对应 ImageView 的宽,图片的高对应 ImageView 的高。

这么多属性值,怎么记忆呢?

  • matrix、center 好记吧。
  • fitXY 好记吧。
  • fitStart、fitCenter、fitEnd 是指把图片某一边放大缩小到对应边,完全显示图片。即将就大边。注意:“大边”既不是指 ImageView 的长边,也不是指图片的长边,具体啥意思,参考前面吧。
  • centerCrop 则与 fitStart、fitCenter、fitEnd 相反,它是将就短边。
  • centerInside 与 fitCenter 非常相似,只是它不会放大小图。

可以看出:

图片一定充满 ImageView 的只有两种属性值:centerCropfitXY。centerCrop 可能图片显示不全,fitXY 可能图片会变形。

图片一定完全显示的有四种属性值:centerInsidefitStartfitCenterfitEnd

那么 scaleType 的默认值是?

网上答案也是五花八门,有说 matrix、有说 centerInside、有说 fitCenter。

而我要告诉你,答案是:fitCenter

如果 ImageView 的尺寸是 wrap_content?是指多少?

指图片的原始尺寸。

相关文章