CENTER_INSIDE和FIT_CENTER缩放类型有什么区别?

170

我分不清ImageView.ScaleType.CENTER_INSIDEImageView.ScaleType.FIT_CENTER之间的区别。

CENTER_INSIDE

等比例缩放图像(保持图像的纵横比),以使图像的两个维度(宽度和高度)都小于或等于视图对应维度的大小(减去填充)。

FIT_CENTER

计算一个缩放比例,以保持原始src的纵横比,并确保src完全适合dst。至少有一个轴(X或Y)会完全适合。结果位于dst的中心。

有人可以阐明两者之间的区别吗?


1
它们是相同的,只是如果发生盒子实际上比图像更大的情况,CENTER_INSIDE 不会扩展图像。 - Fattie
1
@Fattie 谢谢!一旦你知道了它,就很有意义。 - Joshua Pinter
3个回答

280
这里有一个图形化的示例,展示了和之间的区别。

使用的图片(100 × 100):

Android_Robot_100.png


小图像视图 (75 × 50):

CENTER_INSIDE:

小图像视图中的CENTER_INSIDE

FIT_CENTER:

小图像视图中的FIT_CENTER

无论是还是,都会缩小图像。


大图像视图 (300 × 200):

CENTER_INSIDE:

大图像视图中的CENTER_INSIDE

FIT_CENTER:

大图像视图中的FIT_CENTER

不会放大图像,会放大图像。


Android机器人是根据Google创建和共享的作品修改而来,并根据创意commons 3.0属性许可描述的条款使用。


163

FIT_CENTER会确保源图像完全适合容器内,同时水平或垂直轴将精确匹配其中一个轴。

CENTER_INSIDE会将图像居中放置在容器内,而不是使边缘完全匹配。

因此,如果您有一个边长为10英寸的正方形盒子和一个边长为8英寸的图像,则CENTER_INSIDE将位于盒子的正中间,源图像与目标容器之间有2英寸的间隙。

使用FIT_CENTER时,与上面示例相同的图像将适合整个容器,因为两侧相等,而一个轴将匹配目标。如果您有一个5英寸x 10英寸的盒子和一个5英寸x 7英寸的图像,则图像将按比例缩放,因此将拟合其中一个轴,但仍将图像居中放置在目标内部。

它们很相似,但一个目的是使源图像尽可能填充目标区域,而另一个仅将图像居中放置在目标区域内��

希望这能稍微澄清一下。


5
听起来FIT_CENTER(几乎)总是更受青睐。 - cheng yang
2
这仍然不合理,因为FIT_CENTER声明“至少有一个轴(X或Y)将完全适合”。这是否意味着两者做相同的事情? - Christopher Perry
57
基本上,文件说明不清楚CENTER_INSIDE不会进行放大(只会缩小)。 - Ken
@Livven,我的回答有误导吗? - BlackHatSamurai
1
@Ken 它忽略了图像大于视图框的情况,在这种情况下,CENTER_INSIDE 会将其缩小,因此也变得不必要复杂。其他答案正确且更简洁地解释了这一点。 - Livven
显示剩余3条评论

62

如果图像大于容器,则它们是相同的。如果图像小于容器,CENTER_INSIDE不会将图像放大,而FIT_CENTER会。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接