Android ImageView的SaleType属性总结
在使用这个属性的时候,需要明白其中几个属性的区别:
如上图所示为图片自适应的效果。
Center
Center_crop
center_inside
fit_center
fit_end
Fit_start
Fit_end
Fit_xy
为了方便理解,这里将 图片的宽高定义为x,控件ImageView的宽高定义为Y
center属性:
目的:将图片显示在ImagView的中心点,不进行缩放。
1,若x均大于Y,则不完整显示。如下图所示,设置Y为50dp,则图片显示不全。
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="center"
android:src="@mipmap/ic_gundong"
tools:ignore="ContentDescription" />
😂
😂
🐷
2,若x均小于Y,则原图显示。如下图所示,设置Y为200dp.则图片居中原图显示。
在这里插入代码片
center_crop属性:
目的:将图放在中心点,再进行等比例缩放,使得图片的x均不小于控件的Y。
1,若x均小于Y,则等比例放大图片,直至铺满控件,这种情况等比例放大,可能会导致 某方向上的图片显示不全。如下图所示。横向上图片显示不全。
<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:scaleType="centerCrop"
android:src="@mipmap/ic_gundong"
tools:ignore="ContentDescription" />
2,若x1或x2小于Y1或Y2,则放大铺满控件。(x1 x2 指宽或高,其他同理)。
举例:控件为750750,图片位600800,这样会将600放大到750,而800也会等比例放大,则垂直方向会显示不全,(800所在的方向),会被裁剪。
<ImageView
android:layout_width="100dp"
android:layout_height="200dp"
android:scaleType="centerCrop"
android:src="@mipmap/ic_gundong"
tools:ignore="ContentDescription" />
如下图 当控件高为200dp时,图片等比例放大,当放大至与控件高相当时停止,则横向上的图片被裁剪!
3,若x>Y,等比例缩小图片,当x1或x2 等于对应的Y1或Y2时,停止缩放,这种情况则会导致图片显示不完整,有缺失。
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:scaleType="centerCrop"
android:src="@mipmap/ic_gundong"
tools:ignore="ContentDescription" />
特点:图片会铺满imagView,但可能会显示不完全。
Center_inside属性:
目的:将图片放在中心点,再进行等比例缩放。使得图片的 X均不小于控件的Y。
1,若x<y,则将图放在中间,此情况下可能四周会出现背景颜色。假设设置图片控件背景色为黑色,Y为300dp。为方便查看。
<ImageView
android:layout_width="300dp"
android:layout_height="300dp"
android:background="@color/black"
android:scaleType="centerInside"
android:src="@mipmap/ic_gundong"
tools:ignore="ContentDescription" />
2,若x1或x2 >Y1或Y2,则将图片等比例缩小直到控件 完整显示该图片,此情况下,图片的上下或者左右,可能会出现背景颜色。
如下图所示,设置控件的宽小于图片的宽,及x1>y1,图片缩小至完全显示,但是会有背景颜色,项目实际中可能是白色。
<ImageView
android:layout_width="100dp"
android:layout_height="300dp"
android:background="@color/black"
android:scaleType="centerInside"
android:src="@mipmap/ic_gundong"
tools:ignore="ContentDescription" />
同理,设置控件的高小于图片的高,图片也会缩小到等于控件的高。
3,若x>y,则等比例缩小图片使得图片的x均不大于Y,所以也很容易导致上下或者左右出现背景色。
特点:
1,始终会完全显示图片
2,可能导致imageVIew留白,即露出背景颜色。
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:scaleType="centerInside"
android:src="@mipmap/ic_gundong"
tools:ignore="ContentDescription" />
前两者的 区别:
center-crop 要求图片的宽高均不小于控件的宽高。
center_inside 要求图片的宽高均不大于控件的宽高。
fit_center属性:
将图片放在中心点,对图片进行等比例缩放,从而完整的显示图片。。重点完整的显示图片。直到图片的某一个方向的值(X1或x2) 等于控件的某一值(Y1或Y2)
1,当x均(小于)Y,等比例放大图片,这种情况下上下或左右可能出现背景色,与center_inside一致。
<ImageView
android:layout_width="300dp"
android:layout_height="300dp"
android:scaleType="fitCenter"
android:src="@mipmap/ic_gundong"
tools:ignore="ContentDescription" />
2,当图片的X>控件的Y时。则等比例缩小图片,直到x1或X2等于Y1或者Y2任意一值。这种情况下与1 一样,可能出现背景色。(某方向)
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:scaleType="fitCenter"
android:src="@mipmap/ic_gundong"
tools:ignore="ContentDescription" />
3,当图片的某一值 大于控件的某一值时,此时有一个原则:完整的显示图片。所以此时会对图片进行等比例缩放。直到图片的X均不大于控件的Y。
<ImageView
android:layout_width="200dp"
android:layout_height="50dp"
android:scaleType="fitCenter"
android:src="@mipmap/ic_gundong"
tools:ignore="ContentDescription" />
特点: 必须完整显示图片。
与center_inside的主要区别就是:当图片的X都小于控件的Y时,center_inside是完整显示就行,放中间,会出现背景色,但不一定会宽高与控件相等。
而fit_center的宽高至少有一值与控件的相等。(重点区别)
fit_end属性:
和fit_center属性类似,差别在于fit_end会将缩放后的图片放在控件的右下角。
<ImageView
android:layout_width="300dp"
android:layout_height="100dp"
android:scaleType="fitEnd"
android:src="@mipmap/ic_gundong"
tools:ignore="ContentDescription" />
fit_start (左上角)属性:
<ImageView
android:layout_width="300dp"
android:layout_height="100dp"
android:scaleType="fitStart"
android:src="@mipmap/ic_gundong"
tools:ignore="ContentDescription" />
Fit_xy属性:
不按照比例缩放图片,从而使图片铺满整个控件,在此情况下虽然可以 完整的显示图片,但是图片会被拉伸 导致失真。
<ImageView
android:layout_width="300dp"
android:layout_height="300dp"
android:scaleType="fitXY"
android:src="@mipmap/ic_gundong"
tools:ignore="ContentDescription" />
matrix属性:
通过代码设置matrix具体的放缩和变换策略 。
CENTER: 保持坐标变换前矩形的长宽比,并最大限度的填充变换后的矩形。至少有一边和目标矩形重叠。
END:保持坐标变换前矩形的长宽比,并最大限度的填充变换后的矩形。至少有一边和目标矩形重叠。END提供右下对齐。
FILL: 可能会变换矩形的长宽比,保证变换和目标矩阵长宽一致。
START:保持坐标变换前矩形的长宽比,并最大限度的填充变换后的矩形。至少有一边和目标矩形重叠。START提供左上对齐。
<ImageView
android:layout_width="300dp"
android:layout_height="300dp"
android:scaleType="matrix"
android:src="@mipmap/ic_gundong"
tools:ignore="ContentDescription" />
总结:
saleType的默认值为 fit_center。
ScaleType本质上是影响了ImageView中的mDrawMatrix对象,该对象用以在绘制时对Drawable对象进行矩阵转换。