Android dpi,dip,dp的概念以及屏幕適配

屏幕尺寸,屏幕分辨率 的含義

  • 屏幕尺寸: 屏幕的對角線長度,單位是英寸(in). 1英寸 = 2.54釐米
  • 屏幕分辨率: 屏幕橫向和縱向的像素點數.(例如: 橫向 1080px,縱向 1920px,則屏幕分辨率表示爲: 1920 * 1080)

ppi, dpi, dip, dp, sp, px各表明什麼?

  • ppi: 屏幕像素密度(pixels per inch), 是指屏幕上每英寸包含的像素點的數目.
    ppi = 屏幕對角線像素數目 / 屏幕尺寸
  • dpi: (dots per inch), 和ppi是相同概念的不一樣叫法. Android中主要採用dpi的叫法.
  • dip: 屏幕密度無關的像素(density independent pixels)
    Android中以 160dpi 的屏幕爲基準, 規定在此屏幕上 1dip = 1px, 所以dip的公式爲 1dip = DPI/160 px
  • dp: dip 的縮寫
  • sp: (scale independent pixels), 和dp相似,只不過sp的縮放係數能夠根據用戶喜愛設定,經常使用於設置文字大小
    1sp = scaleFactor px
  • px: 1像素

Android中圖片的適配

  • drawable-ldpi          dpi = 120
  • drawable-mdpi        dpi = 160 (基準)
  • drawable-hdpi         dpi = 240
  • drawable-xhdpi       dpi = 320
  • drawable-xxhdpi     dpi = 480
  • drawable-xxxhdpi   dpi = 640

假設咱們的屏幕dpi是480(對應的目錄是drawable-xxhdpi)java

  • drawable-xxhdpi目錄中有須要的圖片,那麼系統將選取該圖片而且不須要縮放.
  • 假設drawable-xxhdpi目錄中沒有須要的圖片,那麼系統將選取其它目錄中的圖片,並進行縮放
int screenDPI;//屏幕dpi
int dirDPI;//選取的圖片所在目錄對應的dpi
int dirImageWidth;//該目錄下圖片的寬度(像素)
int dirImageHeight;//該目錄下圖片的高度(像素)

那麼系統縮放以後, Bitmap的寬度 w = dirImageWidth * screenDPI / dirDPI
               Bitmap的高度 h = dirImageHeight * screenDPI / dirDPI

BitmapFactory.decodexx會自動進行縮放, 放在drawable-nodpi目錄中的除外設計

假設咱們的屏幕dpi是480(對應的目錄是drawable-xxhdpi), 目標圖片尺寸 192 * 192

咱們將這張圖片放到不一樣的目錄下,而後經過BitmapFactory.decodexx 來獲取Bitmap,看看縮放後的尺寸:

圖片放在 drawable-hdpi 中,縮放後的尺寸: 384 * 384
圖片放在 drawable-xxxhdpi 中,縮放後的尺寸: 144 * 144
圖片放在 drawable-nodpi 中, 不縮放: 192 * 192
...
  • 當屏幕dpi介於 drawable-xhdpi 和 drawable-xxhdpi 之間時(例如dpi = 400),那麼系統將選用drawable-xxhdpi中的圖片,並縮放
  • Android中的 density = densityDpi / 160
  • 假設設計師是以dpi=480的屏幕爲基準來設計的,那麼相應的切圖應該放在drawable-xxhdpi目錄中,假設其中一個圖片的尺寸爲72 * 72,那麼XML中給他的大小應該設置爲 24dp.  (72 / density)
  • 若是不但願BitmapFactory.decode出來的Bitmap被縮放,有2種方法
    1. 將圖片放在drawable-nodpi目錄下
    2. 將BitmapFactory.Options.inScaled設置爲false (默認是true)
相關文章
相關標籤/搜索