android学习笔记之ImageView的scaleType属性

举报
江南一点雨 发表于 2021/08/16 23:06:38 2021/08/16
【摘要】 我们知道,ImageView有一个属性叫做scaleType,它的取值一共有八种,分别是:matrix,fitXY,fitStart,fitCenter,fitEnd,center,centerCrop,centerInside。那我们下面一起来看看这八种取值分别代表什么意思。 我用两张图片来做demo,这两张图片的分辨率一大一小,图片分别叫做big和small。原图如下: ...

我们知道,ImageView有一个属性叫做scaleType,它的取值一共有八种,分别是:matrix,fitXY,fitStart,fitCenter,fitEnd,center,centerCrop,centerInside。那我们下面一起来看看这八种取值分别代表什么意思。

我用两张图片来做demo,这两张图片的分辨率一大一小,图片分别叫做big和small。原图如下:

big:

small:

OK,准备工作已经完成。

matrix

matrix表示原图从ImageView的左上角开始绘制,如果原图大于ImageView,那么多余的部分则剪裁掉,如果原图小于ImageView,那么对原图不做任何处理。比如我的两张大小不同的图片,分别显示在96dp×96dp的ImageView上,会有不同的效果,代码如下:


  
  1. <ImageView
  2. android:layout_width="96dp"
  3. android:layout_height="96dp"
  4. android:adjustViewBounds="false"
  5. android:background="#ffaa77"
  6. android:scaleType="matrix"
  7. android:src="@drawable/big" />
  8. <ImageView
  9. android:layout_width="96dp"
  10. android:layout_height="96dp"
  11. android:adjustViewBounds="false"
  12. android:background="#aa99cc"
  13. android:scaleType="matrix"
  14. android:src="@drawable/small" />

我们看到,big图片由于比较大,因此只有左上角显示出来了,其他部分则被剪裁掉了,而small图片由于分辨率比较小,因此完整的显示在ImageView的左上角。

fitXY

fitXY的目标是填充整个ImageView,为了完成这个目标,它需要对图片进行一些缩放操作,在缩放的过程中,它不会按照原图的比例来缩放。比如下面一个栗子:


  
  1. <ImageView
  2. android:layout_width="96dp"
  3. android:layout_height="96dp"
  4. android:background="#ffaa77"
  5. android:scaleType="fitXY"
  6. android:src="@drawable/big" />
  7. <ImageView
  8. android:layout_width="96dp"
  9. android:layout_height="128dp"
  10. android:background="#aa99cc"
  11. android:scaleType="fitXY"
  12. android:src="@drawable/small" />

两张图片都被显示出来了,但是都有一定程度的变形,因为在这里系统只考虑将ImageView填充满,而不会按照原图比例去缩放。

fitStart

将图片按比例缩放至View的宽度或者高度(取宽和高的最小值),然后居上或者居左显示(与前面缩放至宽还是高有关),我们来看下面一个例子:


  
  1. <ImageView
  2. android:layout_width="48dp"
  3. android:layout_height="256dp"
  4. android:background="#ffaa77"
  5. android:scaleType="fitStart"
  6. android:src="@drawable/big" />
  7. <ImageView
  8. android:layout_width="256dp"
  9. android:layout_height="36dp"
  10. android:background="#aa99cc"
  11. android:scaleType="fitStart"
  12. android:src="@drawable/small" />

big图片是缩放至ImageView的宽度,然后居上显示,small图片是缩放至ImageView的高度,然后居左显示。

fitCenter

fitCenter和fitStart基本一样,唯一不同的是fitCenter将图片按比例缩放之后是居中显示,看下面一个例子:


  
  1. <ImageView
  2. android:layout_width="48dp"
  3. android:layout_height="256dp"
  4. android:background="#ffaa77"
  5. android:scaleType="fitCenter"
  6. android:src="@drawable/big" />
  7. <ImageView
  8. android:layout_width="256dp"
  9. android:layout_height="48dp"
  10. android:background="#aa99cc"
  11. android:scaleType="fitCenter"
  12. android:src="@drawable/small" />


fitEnd

fitEnd和fitStart也基本一样,唯一不同的是fitEnd将图片按比例缩放之后是居右或者居下显示,比如下面一个Demo:


  
  1. <ImageView
  2. android:layout_width="48dp"
  3. android:layout_height="256dp"
  4. android:background="#ffaa77"
  5. android:scaleType="fitEnd"
  6. android:src="@drawable/big" />
  7. <ImageView
  8. android:layout_width="256dp"
  9. android:layout_height="48dp"
  10. android:background="#aa99cc"
  11. android:scaleType="fitEnd"
  12. android:src="@drawable/small" />

center

center表示将原图按照原来的大小居中显示,如果原图的大小超过了ImageView的大小,那么剪裁掉多余部分,只显示中间一部分图像,比如下面一个Demo:


  
  1. <ImageView
  2. android:layout_width="48dp"
  3. android:layout_height="256dp"
  4. android:background="#ffaa77"
  5. android:scaleType="center"
  6. android:src="@drawable/big" />
  7. <ImageView
  8. android:layout_width="256dp"
  9. android:layout_height="24dp"
  10. android:background="#aa99cc"
  11. android:scaleType="center"
  12. android:src="@drawable/small" />

centerCrop

centerCrop的目标是将ImageView填充满,故按比例缩放原图,使得可以将ImageView填充满,同时将多余的宽或者高剪裁掉,比如下面一个Demo :


  
  1. <ImageView
  2. android:layout_width="48dp"
  3. android:layout_height="256dp"
  4. android:background="#ffaa77"
  5. android:scaleType="centerCrop"
  6. android:src="@drawable/big" />
  7. <ImageView
  8. android:layout_width="256dp"
  9. android:layout_height="48dp"
  10. android:background="#aa99cc"
  11. android:scaleType="centerCrop"
  12. android:src="@drawable/small" />

centerInsid

centerInside的目标是将原图完整的显示出来,故按比例缩放原图,使得ImageView可以将原图完整显示,比如下面一个Demo:


  
  1. <ImageView
  2. android:layout_width="48dp"
  3. android:layout_height="256dp"
  4. android:background="#ffaa77"
  5. android:scaleType="centerInside"
  6. android:src="@drawable/big" />
  7. <ImageView
  8. android:layout_width="256dp"
  9. android:layout_height="48dp"
  10. android:background="#aa99cc"
  11. android:scaleType="centerInside"
  12. android:src="@drawable/small" />


OK,关于scaleType属性我们就说这么多,一般情况下,当我们给ImageView的宽高都为固定值的时候我们才有可能用到这些属性。


Demo下载



文章来源: wangsong.blog.csdn.net,作者:_江南一点雨,版权归原作者所有,如需转载,请联系作者。

原文链接:wangsong.blog.csdn.net/article/details/50586946

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。