ImageView scaleType属性
2026/9/11 10:22:38 网站建设 项目流程

ImageView是Android 中图片加载显示最常用的控件之一,而scaleType属性就决定图片的显示属性,比如是否进行缩放、等比缩放、缩放后展示位置等。Android 提供了八种scaleType的属性值,每种都对应了一种展示方式。
ScaleType可大体分为三类:

(1) 以fit_开头的4种,共同点是都会对图片进行缩放;
(2) 以center_开头的3种,共同点是居中显示,图片的中心点会与ImageView的中心点重叠;
(3) ScaleType.MATRIX,就是最简单的显示;

1、android:scaleType=“matrix”
表示不改变原图的大小,从ImageView的左上角开始绘制原图,原图超过ImageView的部分作裁剪处理。 ---没有缩放,只从图片左上角开始绘制,ImageView控件尺寸显示范围内保存超过部分剪切
2、android:scaleType=“center”
(1)当图片大于ImageView的宽高:以图片的中心点和ImageView的中心点为基准,按照图片的原大小居中显示,不缩放,用ImageView的大小截取图片的居中部分。---没有缩放,中心点和ImageVIew控件对齐

(2)当图片小于ImageView的宽高:直接居中显示该图片。

3、android:scaleType=“centerCrop”
(1)当图片大于ImageView的宽高:以图片的中心点和ImageView的中心点为基准,按比例缩小图片,直到图片的宽高有一边等于ImageView的宽高,则对于另一边,图片的长度大于或等于ImageView的长 度,最后用ImageView的大小居中截取该图片。

(2)当图片小于ImageView的宽高:以图片的中心店和ImageView的中心点为基准,按比例扩大图片,直到图片的宽高大于或等于ImageView的宽高,并按ImageView的大小居中截取该图片。

4、android:scaleType=“centerInside”
(1)当图片大于ImageView的宽高:以图片的中心和ImageView的中心点为基准,按比例缩小图片,使图片宽高等于或者小于ImagevView的宽高,直到将图片的内容完整居中显示。

(2)当图片小于ImageView的宽高:直接居中显示该图片。

5、android:scaleType=“fitXY”
表示把图片按指定的大小在ImageView中显示,拉伸或收缩图片,不保持原比例,填满ImageView。

6、android:scaleType=“fitStart”
表示把图片按比例扩大(缩小)到ImageView的宽度,在ImageView的上方显示。

7、android:scaleType=“fitCenter”
表示把图片按比例扩大(缩小)到ImageView的宽度,居中显示。

8、android:scaleType=“fitEnd”
表示把图片按比例扩大(缩小)到ImageView的宽度,在ImageView的下方显示。

属性缩放裁切对齐位置一定铺满ImageView拉伸变形大图片小图片
center

(大图超过IV宽高部分裁切)

IV中心点

(小图片:四周可能留白)

图片中心点和IV对齐,不缩放,超过IV大小区域裁切掉图片中心点和IV对齐,不缩放,四周可能留白
centerCrop

(大图缩小;
小图放大)

(大图缩小到有一边和IV对齐,另一边裁切;小图放大两边都大等于IV,大的一边裁切掉)

IV中心点图片中心点和IV对齐,缩小,直到图片宽高一边等于IV的宽高,另一边超过IV部分裁切掉图片中心点和IV对齐,放大,直到图片宽高都大等于IV宽高,另一边超过IV部分裁切掉
centerInside

(大图缩小;
小图原图)

IV中心点

(顶部、底部可能留白)

图片中心点和IV对齐,缩小,直到图片宽高都小于IV宽高图片中心点和IV对齐,原图
fitXY

(图片被拉伸变形)

IV左上角拉伸变形拉伸变形
fitStartIV顶边

(中部、底部可能留白)

缩小图片直到宽度和IV对齐,高度忽略

--正常图片比例

放大图片直到宽度和IV对齐,高度忽略

--正常图片比例

fitCenterIV中线

(顶部、底部可能留白)

fitEndIV底边

(顶部、中部可能留白)

fitStartIV左边

(中部、右边可能留白)

缩小图片直到高度和IV对齐,宽度忽略

--竖图(宽高比小于1的图片)

放大图片直到高度和IV对齐,宽度忽略

--竖图(宽高比小于1的图片)

fitCenterIV中线

(左边、右边可能留白)

fitEndIV右边

(左边、中部可能留白)

matrix(默认)IV左上角

(小图片可能四周留白)

图片左上角和IV左上角对齐,不缩放,超过部分自动裁剪,图片左上角和IV左上角对齐,不缩放,有空白

陪图说明

原图:

尺寸:50*50

尺寸:950*633

简单分析:fitCenter和centerInside,根据上面的效果图来分析,

fitCenter是将原图等比例放大或缩小,使原图的高度等于ImageView的高度,并居中显示,而centerInside在原图的原本size大于ImageView的size时,则缩小原图,效果同fitCenter;在原图的原本size小于ImageView的size时,则不进行任何size处理,居中显示,效果同center。

ImageView的android:adjustViewBounds属性为是否保持原图的长宽比,单独设置不起作用,需要配合maxWidth或maxHeight一起使用

Android .9 图 + ImageView scaleType 配合总结

核心:.9 图负责【哪些区域拉伸、哪些固定】;scaleType 负责【图片在 ImageView 容器里怎么摆放、缩放】,两者独立生效,会互相影响9 图本质:在 png 四周黑线标记:可拉伸区域、内容内边距 (padding)

一、先回顾 9 图规则(.9.png)

  1. 上边黑线:水平方向可拉伸区域
  2. 左边黑线:垂直方向可拉伸区域
  3. 下边黑线:内容水平 padding(文字 / 子内容放这里)
  4. 右边黑线:内容垂直 padding

非黑线区域永远不会被拉伸,保持原始比例大小。

二、ImageView ScaleType 对 9 图的影响

1.fitXY(最常用搭配 9 图,按钮背景)

  • 行为:不保持原图比例,强行把图片拉伸填满 ImageView 宽高
  • ✅ 适合:圆角按钮、气泡背景、弹窗背景(.9 背景)
  • 原理:fitXY 会把整张图片拉伸,但9 图会控制只有标记区域被拉,边角保持不变形

这就是为什么气泡圆角用.9 + fitXY,放大缩小圆角不变形。 注意:如果不用 9 图,fitXY 直接整张图拉伸,圆角会被拉变形。

<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/bubble.9.png" android:scaleType="fitXY"/>

2.fitCenter(默认 scaleType)

  • 行为:保持图片原始宽高比,等比缩放,居中,不超出 View 边界
  • ⚠️ 和 9 图搭配很少用:9 图会优先按原图比例缩放,不会撑满控件;

适合:9 图作为内容图,不是背景。不适合气泡、按钮背景

3.center

  • 原图不缩放,图片原始像素大小,直接居中放在 ImageView
  • 如果 ImageView 比图片大:9 图不会拉伸,只居中展示原图大小

适合:固定大小标识,不需要拉伸背景

4.centerCrop

  • 等比放大图片填满 View,超出部分裁剪
  • 基本不要搭配 9 图做背景:会裁切 9 图的标记区域,容易导致拉伸异常、圆角被裁。

5.centerInside

  • 原图等比缩小,完整显示全部图片,不裁剪;View 大于原图时,图片居中不放大。

9 图不会被拉伸,仅缩小。

6. matrix

  • 手动矩阵控制缩放位移,一般不与 9 图一起使用,容易打乱拉伸区域。

三、重要区分:android:srcvsandroid:background

很多人踩坑!

  1. background设置.9 图: background 自带fitXY逻辑,不需要设置 scaleType,scaleType 只对src生效!
    android:background="@drawable/btn_bg.9.png"
  2. src设置.9 图: 才会受scaleType控制!

坑点:background 不支持内容 padding;9 图定义的 padding,只有用 src 方式加载才会生效

四、推荐组合(工程常用)

  1. ✅ 聊天气泡、按钮背景(src 方式,需要 9 图内边距)
android:src="@drawable/bubble.9.png" android:scaleType="fitXY" android:layout_width="wrap_content" android:layout_height="wrap_content"
  1. ✅ 普通背景(不需要读取 9 图 padding):直接 background,不用 scaleType
android:background="@drawable/bg.9.png"
  1. ❌ 禁止组合:.9图 + centerCrop,极易裁剪边框。

五、常见踩坑

  1. 9 图放到 src,没写 scaleType,默认fitCenter→ 背景不会撑满控件
  2. background 设置 9 图,然后写 scaleType → scaleType 完全无效,白写
  3. 9 图黑线画错 + fitXY:不该拉伸的圆角被拉伸,出现模糊变形
  4. 文件名:必须xxx.9.png;不能在其他文件夹下重命名,AS 会识别失败

六、一句话总结

  • .9src 图片,想要撑满控件、保留圆角不变形 →scaleType="fitXY"
  • .9background:不受 scaleType 控制,自带 fitXY 拉伸
  • centerCrop/fitCenter 适合普通图片,不适合 9 图背景拉伸场景

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询