图文讲解Android ImageView的ScaleType,帮你彻底搞明白

使用ImageView显示图片,是最常规的操作之一

今天和大家聊一个比较基础的话题,Android里ImageView的ScaleType属性,这个属性决定了一张图片如何显示在ImageView上,常用的值有以下几个:

CENTER,CENTER_CROP,CENTER_INSIDE,FIT_CENTER,FIT_END,FIT_START,FIT_XY,MATRIX。

相信ScaleType属性大家都不会陌生。但是,在真实的使用过程中,很多同学总是要实际调试几次才能找到自己的需要的ScaleType值。这说明关于ScaleType,还有些小细节还不是特别清楚。

这篇文章就通过实际的例子,帮你彻底搞懂ScaleType。

问题分析:

一般来说,要把一张图片显示在ImageView上,有下面几个问题需要考虑:

1,ImageView会不会被填满?

2,图片会不会完整显示?

3,图片会不会被伸缩,如果是的话,是否按原始比例伸缩?

在真实的产品环境中,一个ImageView的大小往往都是有限制的,至少长或宽有一条边是有限制的,所以,在ImageView上显示图片还需要考虑:

1,真实的图片比ImageView要小,会怎么显示?

2,真实的图片比ImageView要大,会怎么显示?

第二个问题,还可以细化成:

1,真实的图片长宽都比ImageView的长宽要大,会怎么显示?

2,真实的图片长或宽有一条边比ImageView要大,另一条边比ImageView要小,会怎么显示?

怎么样,简单的一个显示图片操作,就有这么多细节需要考虑。下面的章节,我们就抓住上面几点,通过实际的例子帮你理解ScaleType的各个属性值。


FIT_XY

首先看下实际效果:

FIT_XY的效果

一句话总结FIT_XY:就是以不按原比例伸缩为代价,强制让图片充满ImageView,同时图片所有的部分也会完整显示出来(虽然可能变形)。但是,因为其不按原比例伸缩的特点,真实的产品中不太常用,因为图片被拉伸变形往往是不可以接受的。(上面例子中的美女已经被拉伸的不成样子了)


CENTER

还是先看下例子:

CENTER的效果

这个属性值的名称虽然是CENTER,但是和一般意义上的“居中”有很大不同。这个属性值即不会保证填满ImageView,也不保证图片会完整显示。当实际图片比ImageView小的时候,就是“居中显示”。当图片比ImageView大,就把图片中间的部分显示在ImageView里,其他的裁剪掉不显示。(上面第二组图尤其明显)


FIT_CENTER

先看例子:

FIT_CENTER的效果

FIT_CENTER更接近于大家理解的“居中显示”,也是平时用的最多的一个值。首先,这个属性会保证图片完整显示,不管图片和ImageView的大小关系。而且伸缩的时候是按照比例做的,所以图片质量也可以得到保证。唯一的问题是,FIT_CENTER不保证会填满ImageView。对于大多数场景,这个也足够了。

FIT_START,FIT_END和FIT_CENTER差不多,就不详细介绍了。


CENTER_CROP

先看例子:

CENTER_CROP的效果

CENTER_CROP,是个非常重要的值,但是很多同学对它并不是很了解。首先,这个属性值的名字很奇怪,很难猜出来其真实的含义;其次,它的官方介绍简直又臭又长,让人一头雾水:

Scale the image uniformly (maintain the image's aspect ratio) so that both dimensions (width and height) of the image will be equal to or larger than the corresponding dimension of the view (minus padding). 

其实,CENTER_CROP的特点总结起来很简单:以可能裁切掉部分图片为代价,让图片充满ImageView。

可以和FIT_XY做下对比,CENTER_CROP和FIT_XY是唯二的可以保证填满ImageView的值。所不同的是,FIT_XY是以不保持原始比例伸缩为代价(但是保证原图全部显示出来);而CENTER_CROP是以不能显示完整原图为代价(但是保证原图的原始比例)。


CENTER_CROP和FIT_CENTER的对比

二者都会按原始比例伸缩图片,所不同的是,CENTER_CROP将图片伸缩到填满ImageView为止,FIT_CENTER伸缩到图片完整并居中显示为止。

下面两个动图可以让你看得更清楚:

CENTER_CROP的拉伸方式
FIT_CENTER的拉伸方式

CENTER_INSIDE

先看例子:

CENTER_INSIDE的效果

CENTER_INSIDE又是一个奇怪的值,原文的解释也是让人看不懂:

Scale the image uniformly (maintain the image's aspect ratio) so that both dimensions (width and height) of the image will be equal to or less than the corresponding dimension of the view (minus padding). 

其实总结起来很简单:当原图大于ImageView的时候,相当于FIT_CENTER。当原图小于等于ImageView的时候,相当于CENTER。


MATRIX

看下例子

MATRIX的效果

MATRIX的效果比较简单:不改变原图的大小,从ImageView的左上角开始绘制,超出部分做剪切处理。不保证填满ImageView,也不保证图片完全显示。和CENTER有点类似。反正我在项目中是没有用过这个值。


总结

下面的表格总结了下各个属性值的特点,注意,表格中为“是”并不是说一定会发生,只是说明有这种可能。

属性值对比

思考题

最后再给大家出一道思考题,看看大家的掌握情况:

要实现微信朋友圈九宫格的照片效果,应该使用ScaleType的哪个值?

相信通过学习本文章,聪明的你很快就能找到答案。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容