2014年3月9日 星期日

[Android] 怎麼讓不同螢幕大小與解析度都有相同比例的UI介面? dpi, ppi, dp, px 的換算與關係

在開發 UI 介面時,會遇到一些單位上換算的問題
對於初學者來說,很難釐清這些單位之間的關係

1. dpi? ppi?

  dpi(dot per inch),每英吋多少點。用於表示印刷產品點密度。
  ppi(pixel per inch),每英吋多少像素。用於螢幕的像素密度。

  針對螢幕做設計時,dpi = ppi。

 

2. dp? px?

  px 為實際長度
  dp 為 Android 自己的長度運算單位

  並規定 在 160ppi 時 1dp = 1px長度
  公式:px = (ppi/160)*dp

舉幾個例子來說明
在螢幕上,組成圖片的單位是 pixel(單位 px)

如下圖所示

根據螢幕解析度不同,pixel 點數也就不同
例如同樣這張圖片,在不同解析度的螢幕之下
看起來的大小就不同

同樣螢幕大小,解析度越大,圖片會越小。
同樣解析度大小,螢幕越大,圖片會越大。
如下圖:

1. 4.3吋螢幕,解析度800*480
2. 4.3吋螢幕,解析度1280*720
3. 5.5吋螢幕,解析度1280*720
由上圖可知,決定肉眼看到的圖片大小不是根據螢幕尺寸,也不是根據解析度
那是根據什麼呢?

ppi

如下圖所示
1. 4.3吋螢幕,解析度800*480,217 ppi
 ((√800*800+480*480) / 4.3 = 217),1dp約 1.4px (2217/117/160 = 1.4)
2. 4.3吋螢幕,解析度1280*720,314ppi,1dp約 2px
3. 5.5吋螢幕,解析度1280*720,267ppi,1dp約1.7px
由上圖可知,ppi越大,圖片也就會越大
比例起來由肉眼看到的圖片大小也會差不多

知道這個原理之後,然後呢?

由 公式:px = (ppi/160)*dp 來看
ppi 是已知的,所以 Android 會自行去計算圖片要被放大為幾倍的px
所以我們在設計UI的時候

只要把圖片的單位設定為dp

圖片就會根據你的螢幕大小與解析度,依據比例來自動縮放圖片大小囉!


參考資料:
http://www.zhihu.com/question/21220154

沒有留言:

張貼留言