量化密度如何影响图像资源的选择和缩放?

5
每个Android设备都有一个物理像素密度和一个“量化密度”。来源指出,量化密度是用于确定如何在运行时选择和缩放drawable-dpi图像的密度。
问题:这些图像如何(1)被选择和(2)被缩放?
例如,放置在drawable-xhdpi桶中的64x64图像会被缩放到什么大小?
1个回答

10

对于问题的扩展部分,首先通过运行以下命令获取设备的量化密度:

adb shell getprop ro.sf.lcd_density

将其称为设备的量子化密度。一般情况下,这种量子化密度与设备的物理密度不同,但如果物理密度完美地落在dpi“桶”边界之一上,则可以相同。而物理密度描述了现实世界的测量值,量子化密度由设备制造商设置,并且通常选择以下值之一:

  • 160
  • 240
  • 320
  • 480

量子化密度控制我所说的设备图像缩放因子(ISF)。公式如下:

ISF = ro.sf.lcd_density / 160

ISF是Android资源加载/布局管理器从文件中读取位图并将其呈现到屏幕上时使用的比例因子(我不知道缩放是在加载时还是在渲染时发生)。在Nexus 6设备上,ISF为3.5,因为量化密度设置为560(560/160 = 3.5)。当然,在运行时呈现的大小也取决于包含所讨论的文件的可绘制存储桶。例如,在Nexus 6上:

  • mdpi文件夹中的64像素图像呈现为224像素(因为3.5*64/1.0 = 224)
  • hdpi文件夹中的64像素图像呈现为149像素(因为3.5*64/1.5 = 149)
  • xhdpi文件夹中的64像素图像呈现为112像素(因为3.5*64/2.0 = 112)
  • xxhdpi文件夹中的64像素图像呈现为75像素(因为3.5*64/3.0 = 75)
  • xxxhdpi文件夹中的64像素图像呈现为56像素(因为3.5*64/4.0 = 56)

顺便提一下,量化密度还定义了您在布局文件中指定的dp的物理大小。此公式为:

+=======================+
|          Dq           |
|   1dp = ----- px      |
|          160          |
+=======================+

其中 Dq 是量化密度。例如:

  • 在 Dq 为 160 的设备上,1dp = 1px
  • 在 Dq 为 240 的设备上,1dp = 1.5px
  • 在 Dq 为 320 的设备上,1dp = 2px

“虽然物理密度描述了现实世界中的测量,但量化密度由设备制造商设置,并通常选择以下值之一:”“这不是真的”,因为我记录了相同的值,并报告为440,这不是这4个值中的任何一个。” - Manish Kumar Sharma
没错。通常会选择这些常见值之一,但不一定需要这样做。 - Jo Jo

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