安卓 ImageView 的 scaleType 用法实用总结
如果想快速决定用哪个值好,那直接跳到后面的总结吧。
ImageView 共有7种 scaleType。
- 以
FIT_
开头的4种,共同点是都会对图片进行缩放(只有fitXY不等比缩放); - 以
CENTER_
开头的3种,共同点是居中显示,图片的中心点与ImageView
的中心点重叠; MATRIX
;
下面一个个讲解。
FIT_
-
fitCenter(默认)
等比缩放到某一边能够填充控件大小,且图片能完整显示,并居中。
-
fitStart
等比缩放到某一边能够填充控件大小,且图片能完整显示,并靠左或靠上显示
-
fitEnd
等比缩放到某一边能够填充控件大小,且图片能完整显示,并靠右或靠下显示
-
fitXY
图片(不等比)缩放到控件大小,完全填充控件大小显示
CENTER_
-
center
不使用缩放,显示图片的中心部分,即图片的中心点和ImageView
的中心点重叠。
若图片宽高小于控件宽高,则图片只会显示中间部分,即周围会被裁剪。也就是无论如何图片的大小都不会改变,控件大小决定可见范围。
如左图图片小于ImageView,则能够完全显示;右图图片大于ImageView,只能显示中间的一部分。而图片的显示尺寸并没有变化,只不过显示不全而已。 -
centerInside
当图片小于控件时,效果与center相同,居中显示;否则,等比缩放到某一边能够填充控件大小,并居中显示。与fitCenter的区别就是centerInside的图片只会缩小,不会放大。
-
centerCrop
等比缩放到填充整个控件大小,并居中显示。与fitCenter的区别是centerCrop的图片会填充整个区域,所以可能会被裁剪。
(注意这里图片背景为灰色,图片白色部分不属于ImageView,即ImageView已被图片占满。
MATRIX
需要与ImageView.setImageMatrix(Matrix matrix)
配合使用,指定一个变换矩阵用于指定图片如何展示。
如:
imageView.setScaleType(ImageView.ScaleType.MATRIX); //设置为矩阵模式
Matrix matrix = new Matrix(); //创建一个单位矩阵
matrix.setTranslate(50, 50); //平移x和y各50单位
matrix.preRotate(40); //顺时针旋转40度
imageView.setImageMatrix(matrix); //设置并应用矩阵
总结
- 希望图片能够按照原来的比例显示
- 并且尽可能撑满ImageView(不一定是占满整个ImageView)
- 希望图片能够完整显示
那就用fitCenter
、fitStart
、fitCenter
(选哪个取决于要怎么对齐了,一般是用fitCenter吧,没有设置的时候默认值就是fitCenter) - 希望图片占满整个ImageView,并且能够容忍两边被裁剪
用centerCrop
- 希望图片能够完整显示
- 不一定要撑满ImageView
用centerInside
- 希望按照图片原来大小显示,并且能容忍周围被裁剪
用center
- 并且尽可能撑满ImageView(不一定是占满整个ImageView)
- 不在乎图片比例,希望图片完整显示,且占满整个ImageView,就用fitXY
- 有其他特殊需求的,用比较高级的
matrix
最终总结
可见显示的需求主要是根据是否按比例,图片是否要充满控件这两个因素决定的。就个人使用来说,觉得最常用的就是fitCenter(默认值),因为能够按比例且完整显示,又能在某个方向撑满控件;当希望控件被图片占满时(图片可以被适当裁剪),比较常用的就是centerCrop,因为可以保证图片按比例显示。