屏幕尺寸,屏幕分辨率 的含義
- 屏幕尺寸: 屏幕的對角線長度,單位是英寸(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種方法
- 將圖片放在drawable-nodpi目錄下
- 將BitmapFactory.Options.inScaled設置爲false (默認是true)