AppCompatImageView 使用 ScaleType.CENTER 显示大图像并使用填充

AppCompatImageView displaying big image using ScaleType.CENTER and the use of padding

我有一张 3264x1836 的图像,我将其显示在尺寸为 1280x720 的自定义 AppCompatImageView 中。我想保留图像大小,所以我使用 ScaleType.CENTER,但我也希望它的左上角位于我的自定义视图的坐标 0,0,因此我相应地设置了左边和顶部的填充。
现在,为了实现这一点,我必须使用 3264-1280(宽度之间的差异)作为左填充,使用 1836-720(高度之间的差异)作为顶部填充,而在我看来,这些值都应该除以 2 .
有人可以解释为什么吗?

您可能会破坏 AppCompatImageView 代码,要求它执行未预料到或未测试的操作。

虽然以上可能仍然正确,但您应用的填充是正确的。以下是计算结果:

为简单起见,让我们看一下移动图形所需的左填充。相同类型的计算将适用于顶部填充。

图形的宽度大于ImageView的宽度。

d = w图形 - wimageview

如果图形在 ImageView 中居中,则左右两侧的悬垂将为宽度差异的 1/2。

s = d / 2

图形在 ImageView 的填充内居中。必须指定的填充量必须刚好足以将图形的中心移动 s.

没有填充的ImageView的初始中心是

ci = wimageview / 2

左填充 ( p ) 的偏移中心是

cs = p + (wimageview - p) / 2

所以,

s = cs - ci = p + (wimageview - p ) / 2 - (wimageview / 2)

求解 s 移位所需的填充,我们得到 p = 2s = d。换句话说,我们需要的填充是您所看到的所需移位的两倍。

不涉及填充的修复方法是指定

 android:scaleType="matrix" 

您应该删除填充。新的比例类型会将单位矩阵应用于图像并将其放置在 top/left 角而不调整大小。