天天看點

dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 一、基本概念二、應用三、各機關間轉換四、 示例分析

dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算

iphone7    寬2.3  密集度是326一英寸,  我這裡有一個400px*400px的正方形 由于一英寸=326,不夠放,是以要用2英寸放 假設我用的是400dpi * 400dpi那就是占用的空間大小一樣了

dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 一、基本概念二、應用三、各機關間轉換四、 示例分析

是以光看螢幕的分辨率對于設計師來說是不具備多少實際意義的,通過分辨率計算得出的像素密度(PPI)才是設計師要關心的問題,我們通過螢幕分辨率和螢幕尺寸就能計算出螢幕的像素密度的。

再次使用 iPhone(6~7)作為例子。我們知道該螢幕的橫向實體尺寸為 2.3 英寸 ,且橫向具有 750 顆像素,根據下面的公式,我們能夠算出 iPhone(6~7)的螢幕是 326 PPI,意為每寸存在 326 顆像素。

其實不論我們怎麼除,計算得出來的像素密度(PPI)都會是這個數,寬存在像素除以寬實體長度,高存在像素除以高實體長度,得數都接近于 326。

對設計會造成什麼樣的影響

一塊 326*326px 的正方形色塊在一台 iPhone 7 上面展現出來的實體尺寸将會會是 1*1 英寸。這是因為該螢幕每英寸能容納 326 顆像素,是以 326px 湊在一起剛好就是 1 英寸。假設我們能将 iPhone 7 手機螢幕 PPI 調低 50% 變為 163,色塊還是 326*326px,這個色塊的實體尺寸會變成 2*2 英寸,同樣多的像素,看起來卻大了一倍。咦!這是為啥?

因為我們的色塊是 326*326px 大小的,而這台 163PPI 的假 iPhone 7 每英寸上面隻有 163 顆像素,為了要展示 326*326px 的色塊,它就要多用 1 英寸的螢幕,是以這個色塊在螢幕上面看起來就“長大了”一倍。

dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 一、基本概念二、應用三、各機關間轉換四、 示例分析
dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 一、基本概念二、應用三、各機關間轉換四、 示例分析
dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 一、基本概念二、應用三、各機關間轉換四、 示例分析

dip設置與分辯率無關,但寫螢幕密度有關.在預設情況下,

LDPI密度為120,系數為0.75,

MDPI的密度為160,系數為1.0;

HDPI的密碼為240,系數為1.5;

XHDPI的密度為320,系數為2.0;

所謂密度即機關平方英寸中含像素的數量

一、基本概念

  • dip        : Density independent pixels ,裝置無關像素。
  • dp        :就是dip
  • px        : 像素
  • dpi       :dots per inch , 直接來說就是一英寸多少個像素點。常見取值 120,160,240。我一般稱作像素密度,簡稱密度
  • density : 直接翻譯的話貌似叫 密度。常見取值 1.5 , 1.0 。和标準dpi的比例(160px/inc)
  • 分辨率   : 橫縱2個方向的像素點的數量,常見取值 480X800 ,320X480
  • 螢幕尺寸: 螢幕對角線的長度。電腦電視同理。
  • 螢幕比例的問題。因為隻确定了對角線長,2邊長度還不一定。是以有了4:3、16:9這種,這樣就可以算出螢幕邊長了。

二、應用

  在android裡面,擷取一個視窗的metrics,裡面有這麼幾個值

    metrics.density; 
     metrics.densityDpi;      

  densityDpi : 就是我們常說的dpi。

  density      :  其實是 DPI / (160像素/英寸) 後得到的值。是不是有點奇怪,因為我帶了機關。。。這個涉及到後面一個比較重要的東西,後面再說。

  從上面就看得出了,DPI本身的機關也是 像素/英寸,是以density其實是沒機關的,他就是一個比例值。

  而dpi的機關是 像素/英寸,比較符合實體上面的密度定義,密度不都是機關度量的值麼,是以我更喜歡把dpi叫像素密度,簡稱密度,density還是就叫density。

三、各機關間轉換

1. 計算dpi 

  比如一個機器,螢幕4寸,分辨率480X800,他的dpi能算麼。

  因為不知道邊長,肯定不能分開算,4是對角線長度,那直接用勾股定理算對角線像素,除以4,算出來大概是 dpi = 233 像素/英寸。

  那麼density就是 (233 px/inch)/(160 px/inch)=1.46 左右

  順帶說下,android預設的隻有3個dpi,low、medium和high,對應 120、160、240,如果沒有特别設定,所有的dpi都會被算成這3個,具體可以參考下這個文章

  http://android.tgbus.com/Android/tutorial/201103/347176.shtml

  其中的default就是160。

2. 計算 dp 與 px

  我們寫布局的時候,肯定還是要知道1個dp到底有多少px的。

  換算公式如下: dp = (DPI/(160像素/英寸))px = density px

  注意,這裡都是帶機關的。px是機關,dp是機關,density沒機關。

  為了友善,假設dpi是240 像素/英寸 , 那麼density就是1.5

  那麼就是 dp=1.5px ,注意這是帶了機關的,也就是 裝置無關像素 = density 像素

  那麼轉換為數值計算的話,應該是下面這個式子

  PX = density * DP

也就是 

  像素值 = density * 裝置無關像素值 ,請注意這裡有個值字。

 3. 為啥 标準dpi = 160

  (1)Android Design [1] 裡把主流裝置的 dpi 歸成了四個檔次,120 dpi、160 dpi、240 dpi、320 dpi

  實際開發當中,我們經常需要對這幾個尺寸進行互相轉換(比如先在某個分辨率下完成設計,然後縮放到其他尺寸微調後輸出),一般按照 dpi 之間的比例即 2:1.5:1:0.75   來給界面中的元素來進行尺寸定義。

  也就是說如果以 160 dpi 作為基準的話,隻要尺寸的 DP 是 4 的公倍數,XHDPI 下乘以 2,HDPI 下乘以 1.5,LDPI 下乘以 0.75 即可滿足所有尺寸下都是整數 pixel 。

  但假設以 240 dpi 作為标準,那需要 DP 是 3 的公倍數,XHDPI 下乘以 1.333,MDPI 下乘以 0.666 ,LDPI 下除以 2

  而以 LDPI 和 XHDPI 為基準就更複雜了,是以選擇 160 dpi

     (2)這個在Google的官方文檔中有給出了解釋,因為第一款Android裝置(HTC的T-Mobile G1)是屬于160dpi的。

四、 示例分析

1. 螢幕尺寸(screen size)

  就是我們平常講的手機螢幕大小,是螢幕的對角線長度,一般講的大小機關都是英寸。

  比如iPhone5S的螢幕尺寸是4英寸。Samsung Note3是5.7英寸。

  

dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 一、基本概念二、應用三、各機關間轉換四、 示例分析

圖 1

2.像素(pixel)

  想像把螢幕放大再放大,對!看到的那一個個小點或者小方塊就是像素了。

dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 一、基本概念二、應用三、各機關間轉換四、 示例分析

圖 2

3.分辨率(Resolution)

  是指螢幕上垂直方向和水準方向上的像素個數。

  比如iPhone5S的分辨率是1136*640;Samsung Note3的分辨率是1920*1080;

dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 一、基本概念二、應用三、各機關間轉換四、 示例分析

圖 3 

4.dpi

  是dot per inch的縮寫,就是每英寸的像素數,也叫做螢幕密度。這個值越大,螢幕就越清晰。

  iPhone5S的dpi是326; Samsung Note3 的dpi是386

dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 一、基本概念二、應用三、各機關間轉換四、 示例分析

圖 4

5.dip

  是Density independent pixel的縮寫,指的是抽象意義上的像素。跟裝置的螢幕密度有關系。

  它是Android裡的一個機關,dip和dp是一樣的。

Google的官方說明是這樣的:

  

密度獨立像素(dp)

在定義UI布局時,應該使用一個虛拟像素單元,以一種密度獨立的方式表示布局次元或位置。

密度無關的像素相當于一個實體像素在160 dpi螢幕上,這是系統為“中等”密度螢幕所假設的基線密度。在運作時,系統會根據實際的螢幕密度,透明地處理dp單元的任何擴充。将dp單元轉換為螢幕像素很簡單:px=dp(dpi/160)。例如,在240 dpi螢幕上,1 dp等于1。5實體像素。在定義應用程式的UI時,應該始終使用dp單元,以確定在具有不同密度的螢幕上正确顯示UI。

  就是說在160dpi的螢幕上,1dip=1px。

  它跟螢幕密度有關,如果螢幕密度大,1dip代表的px就多,比如在320dpi的螢幕上,1dip=2px。

為什麼我們在布局的時候最好要用dip,不要用px?

   是因為這個世界上存在着很多不同螢幕密度的手機,螢幕密度是什麼?就是dpi,就是機關長度裡的像素數量。

  想象一下,如果這些手機的尺寸一樣,螢幕密度相差很大,那麼是不是說一個手機水準方向上像素很少,另一個手機水準方向上像素很多?那我們畫同樣pix數量的時候,它顯

  示的長度不就會不一樣了?

  比如下面圖中的兩個手機,同時設定2px長度的Button,在螢幕密度較高的手機裡就會顯示的比較小。

  而同時設定的2dip長度的Button,在兩個手機上顯示的大小是一樣的。

dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 一、基本概念二、應用三、各機關間轉換四、 示例分析

圖 5

  是以如果你在App布局中都用的px作為機關,那麼你的App跑在各個裝置上就會出現奇奇怪怪的現象了。 

  來看一下emulator上的效果,我定義了兩個Button,分别用px和dip做機關。

  布局檔案裡這樣寫

<Button android:layout_width="100px"
    android:layout_height="100px"
    android:text="@string/str_button1"/>
 
    <Button android:layout_width="100dip"
    android:layout_height="100dip" 
    android:text="@string/str_button1"/>      

顯示的界面是這樣的:

  

dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 dpi 、 dip 、分辨率、螢幕尺寸、px、density 關系以及換算 一、基本概念二、應用三、各機關間轉換四、 示例分析

圖 6 

  getResources().getDisplayMetrics().densityDpi 就是螢幕密度。

  getResources().getDisplayMetrics().density 也可以了解為1dip相當于多少個px啦。

  上面的dpi是240,1dip=1.5px

  你看,100dip的Button是100pxButton的1.5倍長吧。

posted @ 2018-05-09 11:59 史D芬周 閱讀( ...) 評論( ...) 編輯 收藏