ImageView在安卓中用来设置图片的大小和摆放
(本文章图片资源报错的原因是因为根据Android studio的资源命名规则,资源名称只能以小写字母,数字和下划线来命名,不能使用大写字母,演示的时候没有管他就写了该文章,大家不要学我)
src设置图片资源
在drawable文件夹中导入图片资源
scaleType设置图片缩放类型
通过上面的图片可以看到,我导入的图片并没有占满整个ImageView控件,上下都有空白。这时可以通过scaleType来控制图片的缩放。
查看scaleType的源码,可以看到scaleType有很多值。
<attr name="scaleType">
<!-- matrix:不改变原图大小,将图片放在ImageView的左上角 -->
<enum name="matrix" value="0" />
<!-- Scale the image using {@link android.graphics.Matrix.ScaleToFit#FILL}. -->
<enum name="fitXY" value="1" />
<!-- fitStart:保持图片的宽高比不变,直到较长的边与ImageView控件的边长相等,缩放完成后将图片放置于ImageView的左上角-->
<enum name="fitStart" value="2" />
<!-- fitCenter:同fitstart,只不过缩放完成后放置于中间 -->
<enum name="fitCenter" value="3" />
<!-- fitEnd:同fitstart,只不过缩放完成后放置于右下角 -->
<enum name="fitEnd" value="4" />
<!-- center:不改变原图大小。如果原图小于ImageView的大小,则保持原图大小,显示在ImageView的中心,当原图大于ImageView的大小时,只保留原图片中间的部分,其他部分裁剪掉 -->
<enum name="center" value="5" />
<!--centerCrop:保持图片宽高比不变缩放图片,直到完全覆盖ImageView,图片要在ImageView中居中。可能会出现图片显示不完整 -->
<enum name="centerCrop" value="6" />
<!-- centerInside:当原图片大小大于ImageView时,效果和fitCenter一样。当原图片大小小于ImageView时,不会像fitCenter那样将图片放大到与ImageView边长相等 -->
<enum name="centerInside" value="7" />
</attr>
现在准备两张图片,RC.jpg(图片比ImageView大很多),RC2.jpg(图片比ImageView小)
matrix:
fitXY:
fitXY会改变原图片的宽高比,然后通过缩放使整个图片都显示在ImageView中
fitStart:
fitCenter:
fitEnd:
Center:
当我使用RC.jpg图片时,由于该图片很大,所以ImageView只会显示原图片中间大小为200dp*200dp(也就是ImageView的大小)的范围,也就是图中红色框的部分,其余部分全部裁剪掉。
最终显示的效果如下图:
但是如果我们使用RC2.jpg图片,由于该图片比ImageView小,所以会把RC2.jpg整个图片放在中间的位置,如下图
Center的特点:不改变图片的大小,按照原图片的大小显示在ImageView中间,但会将超出的部分裁剪
centerCrop:
通俗的讲就是以ImageView的宽高比为依据,在图片中间部分按照该比例取最大限度的范围,然后缩放显示在ImageView中。
比如我ImageView的大小设置的是200dp*200dp,也就是1:1大小,那么就在原图片中间部分1:1比例取一个最大的范围,然后缩小(因为我RC.jpg图片很大所以就是缩小,如果使用RC2.jpg那就是放大)显示在ImageView中
centerInside:
如果图片比ImageView大,那就缩小到把整个图片都放到ImageView中,此时类似于fitCenter
如果图片比ImageView小,那就直接将图片原大小放置在ImageView中间,此时类似于Center
控制ImageView和图片的大小保持一致
maxHeight最大高度
maxWidth最大宽度
adjustViewBounds调整View的界限
通过使用maxWidth和maxHeight来控制图片的最大宽度和最大高度,其中adjustViewBounds的值要设置为true才会生效。
当图片大于设置的maxWidth,maxHeight时,根据小的值(maxWidth为200dp,maxHeight为300dp,maxWidth小,所以以宽200dp为依据保持原图比例不变)来等比例缩小。
当图片的大小小于设置的maxWidth,maxHeight时,ImageView的大小就是原图片的大小。