形象講解Android中dpi,dp和px之間的關係(設計師如何與程序員溝通)

屏幕尺寸指屏幕(顯示屏)對角線的長度,單位爲英寸。dpi(dots per inch 像素密度)指每英寸中的像素數.


(1)在android中,160dpi設備下,1px = 1dp,160dpi表示一英寸中包含160個像素點(px),即把一英寸平均分成160個單元格,每個單元格就有一個像素。如果我們把這160個單元格的單位設爲dp,則1dp=1px;

(2)假設我的設備的分辨率爲1080*1920,尺寸爲5英寸,則我的設備的像素密度爲,即一英寸中包含440個像素點(px),如果把一英寸平均分成160個單元格,則每個單元格有440/160 = 2.75個像素。如果我們把這160個單元格的單位設爲dp,即1dp = 2.75px;

(3)因爲把一英寸分爲160個單元格,所以無論在160dpi或者440dpi下,一個單元格的長度都爲1/160英寸,即1dp都爲1/160英寸。所以,當我們用dp作爲長度單位時,相同dp值下,在任何設備上肉眼看到的都是相同的長度。即在440dpi或者160dpi設備下,160dp都爲一英寸.

(4)從(2)中,“每個單元格有440/160 = 2.75個像素”,我們可以得到換算公式,1像素 = 1單元*(440/160),即px = dp*(dpi/160);


android中獲取dpi:

  DisplayMetrics dm = new DisplayMetrics();
  activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
  screenWidth = dm.widthPixels;
  screenHeight = dm.heightPixels;
  // dpi
  densityDpi = dm.densityDpi;
  // dm.density = dpi/160;
  density = dm.density;

ps: 設計師如何與程序員溝通?

設計師會說明設計稿的UI是按照某種分辨率的和屏幕尺寸的手機來設計,如設計師會說明“該ui的分辨率爲1080*1920,5英寸“,根據換算公式得到像素密度爲440dpi , 1dp = 440/160 = 2.75px。所以程序員在實現UI時,如果佈局文件是以dp爲單位,則把設計圖上標註的像素尺寸除以3(2.75約爲3)即可。即如果設計圖上某個組件標出的寬度爲300px,那麼我們在佈局時設置寬度爲300px/3=100dp。

下圖例子是設計圖中的一部分,數字的單位爲px:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章