scaleType属性解析:
1、scaleType=“matrix”保持原图大小、从左上角的点开始,以矩阵形式绘图。
2、scaleType=“Center”保持原图大小,以原图的几何中心点和ImagView的几何中心点为基准,只绘制ImagView大小的图像。
3、scaleType=“fitStart” 将原图沿左上角的点(即matrix方式绘图开始的点),按比例缩放原图绘制而成的。
4、scaleType=“fitCenter” 将原图沿上方居中的点(即matrix方式绘图第一行的居中的点),按比例缩放原图绘制而成的。
5、scaleType=“fitEnd”将原图沿下方居中的点(即matrix方式绘图最后一行的居中的点),按比例缩放原图绘制而成的。
6、scaleType=“fitXY” 将原图进行横方向(即XY方向)的拉伸后绘制的。
7、scaleType=“centerCrop” 不保持原图大小,以原图的几何中心点和ImagView的几何中心点为基准,只绘制ImagView大小的图像(以填满
ImagView为目标,对原图进行裁剪)。
8、scaleType=“centerInside” 不保持原图大小,以原图的几何中心点和ImagView的几何中心点为基准,只绘制ImagView大小的图像(以显示
完整图片为目标,对原图进行缩放)。
总结:
保持原图(matrix、center),缺点:当控件ImageView尺寸小于图片时,则部分图片显示不出来,相当于切割显示;
等比缩放(fitStart、fitEnd、fitCenter),都能够显示出完整图片,缺点是可能存在空白位置;
不等比缩放(fitXY、centerInside、centerCrop),fitXY、centerInside能显示完整图片,centerCrop只能保证图片中间能够显示,周边肯能会被剪切掉;
图片基础知识梳理(1) – ImageView 的 ScaleType 属性解析
scale type
选择标记识别方式;等级类型;称量方法
双语例句
1
Belt scale type constant feeder
皮带秤式定量给料机
2
From casting shaping, machining, the assembling machine arrives in physical and chemical treatment, have formed themodern production mode of the scale type.
从铸造成型,机械加工,理化处理到组装成机,形成了规模型的现代化生产模式
在使用 ImageView 的过程当中,经常需要通过 scaleType 来对原始的图像进行处理,使得它能在空间中合理地展示。
首先,我们简单介绍一下 scaleType 的分类:
这种情况下,对应的模式只有一种:
最终,在这种情况下,我们可以同 setImageMatrix(Matrix matrix) 来改变。
这一类属性的特点就是 通过拉伸或者压缩图片,使得原图片中所有元素都能够展现,并且至少填满控件 x,y 轴的其中一个 。
一共有四类:
下面三种都会 维持原图的比例 ,使得它们的 x,y 都小于等于控件的宽高,只是最终的图形放的位置不同。
下面的三种类型都会使得控件的中心和图片中心重合:
它不要求原始图片填满 x,y 轴的任意一个,因此, 如果原图的长宽都小于等于控件的长宽,不会进行放大操作,这也是它和 ScaleType.FIT_CENTER 的区别 。
下面,我们通过一个简单的 Demo 来展示一下各种类型的具体表现,我们有两个大小一样的 ImageView 和两个大小不同的原图,其中左边的 ImageView 要比原图小,右边的 ImageView 要比原图大。
在 ImageView 当中,设置图片的接口主要有下面几个函数:
我们就以平时常用的 setImageBitmap 为例,分析一下它整个的流程:
上面的关键方法在 updateDrawable 当中:
在 configureBounds 里就会根据我们所配置的 scaleType 来决定 mDrawable 如何显示,在这里面有一个重要的变量 mDrawMatrix ,我们前面说到的所有变换都是通过它来实现的,当然,我们除了可以让系统自己根据 scaleType 来生成 matrix ,也可以通过 setImageMatrix 手动的指定自己的变换:
那么这个 mDrawMatrix 是在什么时候使用的呢,我们看一下 onDraw 方法:
我们总结一下,整个 scaleType 的原理就是在 configureBounds 中配置了 mDrawMatrix ,而在 onDraw 当中会根据 mDrawMatrix 来对图层进行变换,在这个变换之后的图层上进行绘制 mDrawable ,之后再恢复图层。
上面,我们看到的都是 src 设置的效果,我们回忆一下,通过设置 android:background 也可以设置一个图片给它,其实 background 是 View 的属性,在我们之前分析 View 的绘制流程的时候, draw(canvas) 中有一步就是绘制背景:
我们来看一下设置背景的边界的函数,可以看到,这里没有考虑 padding 值,也就是说我们通过 background 设置的图片是填满整个控件,并且不考虑 padding 的:
最后再结合一下第四节的知识,我们是先绘制背景,然后才在 ImageView 的 onDraw 函数当中在 canvas 上绘制的,因此, src 的图片一定会绘制在 backgroud 之上。
以上就是关于图片之scaleType属性全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!