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.
![图片之scaleType属性](https://www.jukendg.com/wp-content/uploads/2024/09/e1f85f82a116e1cd93f4298555597b8b.jpeg)
从铸造成型,机械加工,理化处理到组装成机,形成了规模型的现代化生产模式
在使用 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属性全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!