2012-03-11 89 views
0

我想在Java中創建一個簡單的Android應用程序,但我在路上遇到了一個碰撞。如何將像素轉換爲dp?

我有一個數組列表,其中包含許多位圖,我將它們繪製到畫布上,但我使用的是像素的測量,並且在大多數設備上都沒有出現。

那麼有什麼方法可以找出我的圖形在dp中的大小,並用dp將它縮放到屏幕密度/大小並用dp或dip定位它。

我的圖形(正方形):

在LDPI圖形大小= 50px的

在MDPI圖形尺寸= 960x75像素

在華電國際平面尺寸= 100px的

Everyting其他在代碼中很好,除了它看起來很奇怪嗎?

任何幫助,將不勝感激。

James。

+1

你看[這裏](http://stackoverflow.com/questions/4605527/converting-pixels-to-dp-in-android)? – dldnh 2012-03-11 19:40:10

回答

7

從Android顯影劑DOC:

定義UI佈局時應該使用,以表達佈局尺寸或位置的密度無關的方式的虛擬像素。 與密度無關的像素相當於160 dpi屏幕上的一個物理像素,這是系統爲「中等」密度屏幕假設的基準密度。在運行時,系統根據使用的屏幕的實際密度,根據需要透明地處理dp單位的任何縮放比例。將dp單位轉換爲屏幕像素很簡單:px = dp *(dpi/160)。例如,在240 dpi屏幕上,1 dp等於1.5個物理像素。定義應用程序的用戶界面時,你應該總是使用dp單位,確保在屏幕上的UI的正確顯示不同密度

看到this獲取更多信息。

1
/** 
* Convert dp in pixels 
* @param dp 
* @return 
*/ 
public int getPx(int dp){  
    float scale = getResources().getDisplayMetrics().density; 
    return((int) (dp * scale + 0.5f)); 
} 
+0

你爲什麼要加上.5f? – 2013-01-19 23:27:31

+1

僅用於四捨五入,但您可以改爲使用Math.round方法:int px = Math.round(dp * scale); – user23 2013-01-20 23:42:33

+1

問題是px到dp。爲什麼回答dp到px? – Ramprasad 2013-03-22 05:37:26