为什么Nexus 6的像素密度是560dpi?

34
如何为Nexus 6准备资源?如果我将图像放在xxxhdpi中,它们将缩小并失去质量;如果我将图像放在xxhdpi中,它们会扩大并失去质量。开发人员为什么决定将密度值设置为560dpi,如果实际密度493ppi更接近于xxhdpi的480dpi?
Nexus 6拥有令人印象深刻的5.96英寸Quad HD屏幕显示器,分辨率为2560 x 1440(493 ppi),这相当于~730 x 410dp(独立像素密度)。
Nexus 6具有量化的密度为560dpi,介于xxhdpi和xxxhdpi主要密度桶之间。
对于Nexus 6,平台将缩小xxxhdpi资源,但如果这些资源不可用,则会扩大xxhdpi资源。
xxhdpi ~480dpi
xxxhdpi ~640dpi

1
像“为什么开发者会……”这样的问题通常不适合在Stack Overflow上提问。 - CommonsWare
2
我将图像放置在xxxhdpi上,它们会缩小并且失去质量。我将图像放置在xxhdpi上,它们会放大并且失去质量。当图像被缩小(中值近似)而不是放大(像素化)时,您可以获得更好的质量。 - Phantômaxx
4
有没有可以精确为这部手机指定资源的选项?类似于drawable-560dp这样的选项。 - Display Name
1
分辨率为1440 x 2560像素(~493 ppi像素密度)的xxhdpi。 - uvrpavan
3个回答

7
在Nexus 6的情况下,制造商选择了一个量化密度为560(adb shell getprop ro.sf.lcd_density),即使物理密度约为493(getResources().getDisplayMetrics().toString())。了解为什么他们会这样做需要了解量化密度的含义以及它如何影响图像资源渲染,这在这里有解释。
简而言之,560的量化密度意味着用于加载/渲染图像的比例因子将是3.5。用D. Hackborn的话说,“密度...是设备制造商决定对其UI运行有意义的抽象密度存储桶。这是用于评估诸如“dp”单位并从资源中选择和缩放位图的内容。”

7
您可以使用drawable-560dpi来适配560 dpi。 drawable-560dpidrawable-xxxhdpi 的图片具有相同的分辨率。

2
“drawable-560dpi和drawable-xxxhdpi图像分辨率并不相同。”这是错误的——问题的整个重点在于560dpi的分辨率介于xxhdpi和xxxhdpi之间。 xxxhdpi是640 dpi。如果设备将自己指定为560dpi(例如Nexus 6),会发生什么情况呢?它们首先在drawable-560dpi中查找文件名。如果没有找到,则会在drawable-xxxhdpi中查找,如果还是没有找到,则会在drawable-xxhdpi中查找。然后找到的图像将缩放到显示矩形中。 - ToolmakerSteve

2

我认为这是一个合理的问题。有些设备的dpi介于支持的范围之间(xxhdpi和xxxhdpi),使用图像将进行不必要的软件缩放。我不在意质量差异,但它会影响应用程序的启动性能。 检查BitmapFatory中的变量willscale,如果为true,则平台将执行不必要的额外软件缩放。理想情况下,硬件UI应直接使用OpenGL ES进行缩放。


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