2

已阅读 冗长但仍不清楚的文档。

假设我有一张size = 120px * 80px的图片,在默认的mdpi/160密度下,我还需要准备

ldpi = 90 * 60
hdpi = 180 * 120
xhdpi = 240 * 160

上面的计算对吗?假设我只有一个布局,那么我需要准备图像并将它们放在相应的可绘制文件夹下,对吗?

谢谢

4

7 回答 7

3

根据Google的公式,您计算的图像尺寸是正确的:

pixels = dp * (density / 160)

了解各种 DPI 的目标密度将使我们能够计算最终图像尺寸:

ldpi = 120 DPI
mdpi = 160 DPI
hdpi = 240 DPI
xhdpi = 320 DPI

以下是宽度的正确计算,从 120 像素宽的中等密度资产开始:

ldpi  (120 DPI) = 120 * (120 / 160) == 90
mdpi  (160 DPI) = 120 * (160 / 160) == 120
hdpi  (240 DPI) = 120 * (240 / 160) == 180
xhdpi (320 DPI) = 120 * (320 / 160) == 240

以下是高度的正确计算,从 80 像素高的中等密度资产开始:

ldpi  (120 DPI) = 80 * (120 / 160) == 60
mdpi  (160 DPI) = 80 * (160 / 160) == 80
hdpi  (240 DPI) = 80 * (240 / 160) == 120
xhdpi (320 DPI) = 80 * (320 / 160) == 160

制作最终图像:

ldpi = 90 x 60
mdpi = 120 x 80
hdpi = 180 x 120
xhdpi = 240 x 160

如果它们尚不存在,则在res/下创建以下文件夹并将正确的资产放入:

  • 可绘制的 ldpi
  • 可绘制的 mdpi
  • 可绘制的 hdpi
  • 可绘制的 xhdpi
于 2012-08-19T18:19:26.813 回答
2

是的,这些是正确的尺寸。

是的,只需将您的各种版本放在 res/drawable-ldpi、-mdpi、-hdpi 和 -xhdpi 文件夹中即可。

根据您的图像 - 特别是它是否仍然看起来很好自动缩小 - 您可以只提供 hdpi 和 xhdpi 版本,Android 将在运行时分别为 ldpi 和 mdpi 自动缩放它们。

于 2012-08-19T17:40:19.853 回答
1

编辑:好的,计算是正确的。根据px = dp * (dpi / 160)来自http://developer.android.com/guide/practices/screens_support.html的公式,其中 mdpi 上的像素 = dp。

这里有一些额外的信息:

Dpi 告诉您 1 英寸中有多少点(像素)。但它并没有告诉你屏幕总共有多少像素。因此,您可以拥有一个设备,比方说,它的宽度和高度为 400 像素,屏幕的对角线为 5 英寸。有了这个,你就得到了 dpi 值。(例如使用http://members.ping.de/~sven/dpi.html )。

现在您有了另一个设备,它具有相同的 dpi 值,但分辨率更高且更大,例如 1000 x 1000 像素和大对角线。

如果您为第一种情况创建了一个图像,比如说 200 x 200 像素,它将占据屏幕的一半,但在第二种情况下,它将仅占屏幕的 1/5,尽管两个设备具有相同的 dpi,并且这可能不是你想要做的。

我通常做的是定位通常具有此 dpi 的设备的分辨率(如 hdpi -> 480x800、xhdpi -> 720x1280 等),并在布局中使用 dip 与 scaleType“fitStart”、“center”、等以保持图像比例。所以我将不同分辨率的图像放在 ldpi、hdpi 和 xhdpi 文件夹中,但我不使用公式。

如果有必要,也可以将屏幕尺寸与 dpi 结合使用/代替:

超大屏幕至少为 960dp x 720dp

大屏幕至少为 640dp x 480dp

普通屏幕至少为 470dp x 320dp

小屏幕至少为 426dp x 320dp

这适用于 dpi 等其他文件夹。

顺便提一句。目前可以为不同的分辨率/屏幕在 Google Play 中放置不同版本的应用程序,因此用户不必下载所有文件(巨大的应用程序大小、长时间下载等),只需下载必要的文件即可设备。

于 2012-08-19T17:47:49.327 回答
0

ldpi、mdpi、hdpi、xhdpi 的图像缩放比例是 3:4:6:8 但你想一次 1) 如果有带有 ldpi 小屏幕的手机,那么它将适合屏幕。2)如果有带有 ldpi 中屏的手机,那么图像会显得更小 3)2)如果有带有 ldpi 大屏幕的手机,那么图像会显得更小。

对于所有 mdpi、hdpi 和 xhdpi 屏幕都是如此。

如果有机会在您的应用程序中使用九个补丁图像,请尝试这些图像。

于 2012-08-17T11:02:27.663 回答
0

是的,您所做的尺寸计算是正确的。

现在,您需要将它们放在项目的res/drawable中的ldpimdpihdpixhdpi各自的文件夹中。

于 2012-08-19T17:46:07.060 回答
0

如果您的目标是让您的图像在不同像素密度的设备上具有(大致)相同的物理尺寸,那么您的计算是正确的。图像将进入目录

res/drawable-ldpi
res/drawable-mdpi
res/drawable-hdpi
res/drawable-xhdpi

Android 将设备分为这些通用密度类别之一(即 120dpi、160dpi、240dpi 和 320dpi),并根据这些比率缩放图像。由于物理设备不一定是这些密度之一,因此图像的物理大小仍然会因设备而异。请注意,如果您不提供特定密度的图像,Android 将通过缩放默认/mdpi 图像来生成一个。通常,结果并不完全符合您通过提供自己的图像所获得的质量。

如果您运行 Android Lint,它会告诉您任何丢失的资源(例如忘记包含 xhdpi 图像),它还会告诉您缩放计算是否严重偏离。这是一个很好的功能。

请注意,整个图像缩放方法与屏幕尺寸无关,仅与像素密度有关。您还可以拥有不同屏幕尺寸甚至不同屏幕尺寸/密度组合的资源文件夹。

但是,如果您想要一个无论屏幕密度如何都以 120 x 80 像素显示的图像,则上述方案将不起作用。相反,您应该将图像放在文件夹中

res/drawable-nodpi

Android 不会缩放从那里检索到的图像。结果是您的图像在 mdpi 设备上约为 3/4" x 1/2",在 ldpi 设备上约为 1" x 3/4",在 xhdpi 设备上约为 3/8" x 1/4",等等.

于 2012-08-19T17:58:22.370 回答
0

如果您知道设备的屏幕密度 (dpi),则可以使用它来计算以像素为单位的等效大小:

等效像素 = sizeInDP*(screenDensity/160)

其中 sizeinDP 是要在其中显示图像的小部件的大小。计算各种屏幕密度的像素大小,并将它们放在相应的文件夹下。

因此,如果您ImageView的尺寸为 300dp X 200dp(宽 X 高),并且屏幕密度为 320dpi,则以像素为单位的图像尺寸应为:

宽度 = 300*(320/160) =
600 像素高度 = 200*(320/160) = 400 像素

希望这可以帮助!

于 2012-08-19T18:03:54.067 回答