2012-08-17 77 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