ImageView android:cropToPadding,它究竟做了什么?

ImageView android:cropToPadding, what it actually does?

我查看了标签 android:cropToPadding here 的文档,它只说:

If true, the image will be cropped to fit within its padding.

May be a boolean value, such as "true" or "false".

这让我很难理解。

我的应用程序中有一个 ImageView(由其他人开发):

<ImageView
      android:layout_width="125dp"
      android:layout_height="125dp"
      android:layout_gravity="center"
      android:maxWidth="100dp"
      android:padding="20dp" />

这个 ImageView 里面有 cropToPadding 标签,主屏幕上有 20 个 ImageView,里面都有这个标签,应用程序显然需要时间来因为有更多图像而加载,但是删除图像不是一个选项,所以当我遇到这个标签时,我正在寻找无用的东西并尝试优化布局。

删除此标签 显示在 ImageView 内的图片,但每张图片都包含此标签肯定有某种原因。所以我开始寻找这个标签的作用,而文档并不清楚为什么要使用这个标签。

谁能解释一下这个标签对图像的作用?我找的资源不多,全是"This crops the Image to padding",什么意思!我知道填充是什么,我知道裁剪是什么,但是 "Sets whether this ImageView will crop to padding" 是什么意思?

这是一个需要回答的复杂问题,因为我们必须深入研究 ImageView 如何实际将图像绘制到屏幕的一些 nitty-gritty 细节。

首先要确定的是,有两个矩形会影响ImageView 的绘制行为。第一个是由 ImageView 的尺寸 忽略 填充定义的矩形。第二个是由 ImageView 的尺寸 考虑 填充定义的矩形。 (显然,如果 padding 为 0,那么这些将是相同的。)

接下来要确定的是 ImageView 都有一个 scale 类型 定义当图像的固有尺寸不匹配时如何拉伸 and/or 裁剪图像它被绘制到的矩形的大小。

默认缩放类型是 FIT_CENTER,它会缩小图像以适应视图边界 + 填充(也就是说,图像将在考虑填充的矩形内绘制)。由于图像是在 内部 填充矩形内绘制的,因此 android:cropToPadding 无效。

但是,其他比例类型的工作方式不同。 scale 类型 CENTER 简单地将图像定位在视图的中间,但不执行缩放(因此如果图像比视图大,将被裁剪)。在这种情况下,android:cropToPadding 定义图像是只被视图的边界裁剪还是被视图的填充裁剪。

一图胜千言:

此图片显示了 72x72 视图中的同一张 72x72 图像 ,填充为 16dpCENTER 比例类型。左边的ImageView有android:cropToPadding="false",右边的ImageView有android:cropToPadding="true".