ImageView
是 Android 中最经常使用的控件之一,而在使用ImageView
时,必不可少的会使用到它的scaleType
属性。该属性指定了你想让ImageView
如何显示图片,包括是否进行缩放、等比缩放、缩放后展现位置等。Android 提供了八种scaleType
的属性值,每种都对应了一种展现方式,下面就对每一种scaleType
属性值进行图文解释。android
首先,这个是测试放到ImageView
中的图从左到右依次有各个角色,便于区分,这张图是1920*1080,不管长宽都比测试所用的ImageView
大。markdown
这个是用于测试的ImageView
布局:ide
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorAccent">
<ImageView
android:id="@+id/image_view"
android:layout_width="300dip"
android:layout_height="300dip"
android:layout_gravity="center"
android:background="@android:color/holo_purple"/>
</FrameLayout>
复制代码
能够看到ImageView
是正方形的,其背景色为紫色,父布局设置其背景色为红色,这样能够很容易看到各个控件的大小。在手机上这个布局看起来是这个样子的,紫色空间就是ImageView
:布局
scaleType
属性既能够在 XML 中设置,也能够在代码中设置:测试
android:scaleType="centerInside" //XML中
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); //代码中
复制代码
八个ScaleType
,其实能够分为三个类型:spa
FIT_
开头的4种,它们的共同点是都会对图片进行缩放;CENTER_
开头的3种,它们的共同点是居中显示,图片的中心点会与ImageView
的中心点重叠;ScaleType.MATRIX
,这种就直接翻到最后看内容吧;该模式是ImageView
的默认模式,若是没有设置ScaleType
时,将采用这种模式展现图片。在该模式下,图片会被等比缩放到可以填充控件大小,并居中展现:3d
这里例子里由于图片宽大于高,因而被缩放到控件大小并居中展现,上下会留白。若是图片的高大于宽,那么居中显示就会在左右留白。code
图片等比缩放到控件大小,并放置在控件的上边或左边展现。如图所示,此模式下会在ImageView
的下半部分留白,若是图片高度大于宽,那么就会在ImageView
的右半部份留白。orm
图片等比缩放到控件大小,并放置在控件的下边或右边展现。如图所示,此模式下会在ImageView
的上半部分留白,若是图片高度大于宽,那么就会在ImageView
的左半部分留白。xml
图片缩放到控件大小,彻底填充控件大小展现。注意,此模式不是等比缩放。这个模式理解也是最简单的,如图:
不使用缩放,ImageView
会展现图片的中心部分,即图片的中心点和ImageView
的中心点重叠,如图。若是图片的大小小于控件的宽高,那么图片会被居中显示。
这是我最喜欢的模式,由于在该模式下,图片会被等比缩放直到彻底填充整个ImageView
,并居中显示。该模式也是最经常使用的模式了。如图能够看到,图片的高度是能彻底展现出来的:
使用此模式以彻底展现图片的内容为目的。图片将被等比缩放到可以完整展现在ImageView
中并居中,若是图片大小小于控件大小,那么就直接居中展现该图片:
这里你们看到这个模式的效果与ScaleType.FIT_CENTER
的效果相同,这是由于所用图片是是大于ImageView
的大小的,若是图片是小于控件大小,那么就可以看出来这两个模式下的差异了。
通常状况下重点都放在最后,在这八种ScaleType
中,这个模式就是重点了。该模式须要与ImageView.setImageMatrix(Matrix matrix)
配合使用,由于该模式须要用于指定一个变换矩阵用于指定图片如何展现。其实前面的7种模式都是经过ImageView
在内部生成了相应的变换矩阵,等因而提供了该模式的一种特定值,使用这个模式只要传入相应矩阵,也就能实现上述七种显示效果。 关于如何使用矩阵的内容,不是很快能说完,因此这里就不说了。 另外注意,在使用时,须要先调用
imageView.setScaleType(ImageView.ScaleType.MATRIX);
复制代码
再调用
imageView.setImageMatrix(matrix);
复制代码
注意顺序不要搞错,不然会出现问题的。下面看一下代码:
imageView.setScaleType(ImageView.ScaleType.MATRIX); //设置为矩阵模式
Matrix matrix = new Matrix(); //建立一个单位矩阵
matrix.setTranslate(100, 100); //平移x和y各100单位
matrix.preRotate(30); //顺时针旋转30度
imageView.setImageMatrix(matrix); //设置并应用矩阵
复制代码
每行代码都有注释,其展现的效果以下图显示。