2012-08-17 95 views
2

已阅读doc这是很长,仍然不清楚。支持Android上的多屏幕

假设我有尺寸= 120像素* 80px的图像时,默认MDPI/160密度下,我还需要准备

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

高于右边的计算?假设我只有一个布局,所以我需要的是准备图像并将它们放置在相应的可绘制文件夹下,对吧?

由于

回答

2

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

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

根据你的图像 - 具体是否它看起来不错,自动缩小 - 你可以只提供hdpi和xhdpi版本,Android会在运行时分别自动缩放ldpi和mdpi。

0

图像的LDPI,MDPI,HDPI,xhdpi缩放比为3:4:6:8但ü认为一旦 1),如果有移动用LDPI小屏幕是有那么它将适用于屏幕。 2)如果有ldpi中画面的移动存在,那么图像显得稍小一点 3)2)如果有移动ldpi大屏幕,那么图像显得更小。

像这样的所有mdpi,hdpi和xhdpi屏幕。

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

0

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

现在,你需要把他们在LDPIMDPI华电国际xhdpi的各自的文件夹中RES /绘制项目的

+0

(以dp查看尺寸*屏密度)/ 160 – Swayam 2012-08-19 18:01:23

+1

@Ixx - Android的基于它们的(近似)分类屏幕分为四类像素密度:ldpi = 120像素/英寸; mdpi = 160像素/英寸; hdpi = 240像素/英寸; xhdpi = 320像素/英寸。为了保持相同的物理尺寸,图像像素尺寸应根据这些比例进行缩放。 – 2012-08-19 18:04:53

+0

@lxx有一个公式。看到我的答案。如果您知道dp中的窗口密度和窗口小部件的大小,则可以以像素为单位计算等效大小。 – 2012-08-19 18:15:49

1

编辑:好的,计算是正确的。根据http://developer.android.com/guide/practices/screens_support.html的公式px = dp * (dpi/160),其中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(如华电国际 - > 480×800,xhdpi - > 720x1280等)设备的分辨率泽泻,并在与scaleType组合“fitStart布局使用浸“,”中心“等,以保持图像的比例。所以我把不同分辨率的图像放在ldpi,hdpi和xhdpi文件夹中,但我不使用公式。

还有结合使用的屏幕尺寸的/不是DPI的可能性的情况下,有必要:

XLARGE屏幕至少960dp X 720dp

大屏幕至少640dp X 480dp

正常屏幕是至少470dp X 320dp

小屏幕是至少426dp X 320dp

这适用于像dpi这样的其他文件夹。

顺便说一句。目前,可以将不同版本的应用在Google Play中用于不同的分辨率/屏幕,因此用户无需下载所有文件(巨大的应用尺寸,长时间下载等),只需要下载设备。

+1

Android中的dpi缩放的目的是使图像在显示屏上具有相同的_physical size_,而不管屏幕像素密度如何。这种缩放并非旨在保持图像与整个设备的总屏幕尺寸相同的比例。正如您所说,您可以使用屏幕尺寸类别来提供该功能,但除此之外,Android中没有任何内容可以与像素密度缩放等效。另请注意,从API 11(蜂巢)开始,为不同屏幕尺寸打包资源有一种新方法。 – 2012-08-19 18:38:01

+0

通常,如果您使用图像作为背景或作为ImageView的源,则图像大小将由视图决定,而不是由其内在大小决定。但是,固有尺寸(以像素为单位)将取决于检索图像资源时使用的密度。在视图不控制图像大小的情况下(例如,如果使用带有android:gravity =“center”的XML位图),内在大小将很重要。 – 2012-08-19 18:52:51

+0

啊,是的,你说得对,现在我明白了。不知何故,我将所有设备的“屏幕看起来都一样”与倾角联系起来,事实并非如此。视图本身在所有设备中具有相同的物理尺寸,但与屏幕尺寸没有任何关系。 – Ixx 2012-08-19 18:53:13

0

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

RES /提拉 - LDPI
RES /提拉 - MDPI
RES /提拉 - 华电国际
RES /绘制-xhdpi

的Android设备划分为一个这些通用密度等级(120dpi,160dpi,240dpi和320dpi),并根据这些比例缩放图像。由于物理设备不一定是这些密度中的一种,因此图像的物理尺寸在各个设备之间可能会略有不同。请注意,如果您不提供特定密度的图像,Android会通过缩放默认/ mdpi图像来生成一个图像。一般来说,结果并不完全符合您通过提供自己的图像而获得的质量。

如果你运行Android Lint,它会告诉你任何缺失的资源(比如忘记包含一个xhdpi图片),它也会告诉你如果你的缩放计算基本上是关闭的。这是一个很好的功能要知道。

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

但是,如果您希望无论屏幕密度如何都能以120 x 80像素显示的图像,上述方案将无法工作。相反,你应该把图像的文件夹中

RES /绘制-nodpi

Android将不能扩展,它从那里获取的图像。结果是,您的图像在mdpi设备上约为3/4“x 1/2”,在ldpi设备上为1“x 3/4”,在xhdpi设备上为3/8“x 1/4”等。

0

可使用此来计算在像素等效尺寸如果知道设备的屏幕密度(DPI):

equivalentPixels = sizeInDP *(screenDensity/160)

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

因此,如果你有大小300dp X 200dp(宽x高)的ImageView,并且屏幕密度是320dpi,在像素的图像尺寸应该是:

宽度= 300 *(一百六分之三百二十〇)= 600px
Height = 200 *(320/160)= 400px

希望能对您有所帮助!

pixels = dp * (density/160) 

了解各种干粉吸入器的目标密度将使我们能够计算出最终的图像尺寸:

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

这里将

3

你已经计算出的图像尺寸基础上,formula from Google是正确的从宽度为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 

资源创建以下文件夹/如果它们不存在并丢弃正确的资产:

  • drawable-ldpi
  • 抽拉-MDPI
  • 抽拉-HDPI
  • 抽拉-xhdpi