Android 理解像素密度與像素的關系

Android的手機多種多樣,不同手機的屏幕密度也不同,故在相同物理尺寸下的所包含的像素點是不同的。

開發(fā)使用

在日常開發(fā)中,界面的xml文件中我們使用的是 dp 的單位,但是開發(fā)中使用的Android 的 API 則是 px。對于xml文件,系統(tǒng)在進行界面繪制時,會根據手機屏幕密度計算出對應的像素尺寸,所以我們在編寫代碼需要進行適配,根據不同手機屏幕的密度設置像素尺寸。

密度是單位體積的質量,所以相同物理尺寸下的屏幕區(qū)域中,密度越大,那么這塊區(qū)域內的像素點也就越多。如果在代碼中添了設計給的像素尺寸,那么在密度大的手機上,實際的顯示效果就會比設計圖上的小了。

dp與px轉換公式

px = dp * (dpi / 160)
dp = px / (dpi / 160)

這個公式的由來是因為,android官方規(guī)定,在dpi為160的設備下,1dp = 1px,其中 dpi / 160 也稱之為密度。那么在320dpi設置下,1dp = 2px。

Google的官方文檔給出過解釋,因為第一款 Android 設備( HTC 的T-Mobile G1)是屬于(注意,是屬于,不是等于)160dpi的,

dp 與 px 轉換代碼

public static int dipToPx(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    public static int pxToDip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

在代碼中轉換時最后加上了0.5f,Android官方文檔給的解釋是為了向上取整,這樣轉換也就更精確

相關概念

DPI

DPI 全稱為 Dots Per Inch. (Inch的含義是英寸),意思也就是『一英寸內點的個數』。Android 設備采用 DPI 來表示屏幕的『密度』。DPI 原本是印刷行業(yè)的概念,意思是一英寸內有多少個墨點。

PPI

PPI(Pixels Per Inch) 意思是『每英寸內的像素數』,這是通用的概念

屏幕尺寸

手機所說的5.0寸指的是屏幕對角線的長度為5.0英寸。1英寸 = 2.54cm

分辨率

指的是屏幕的像素總數,1920 X 1080 的分辨率指的屏幕是由長為1920個像素點,寬為1080個像素點所組成的長方形區(qū)域。

屏幕密度

可以通過屏幕的長寬算出對角線的長度除以對角線的長度,就可以算出每英寸的屏幕密度

px

px 就是像素 pixel 的縮寫。1px 代表一個顯示設備中的一個像素點。

dp

DP 或者 DIP 叫做(Density-Independent pixel),Android 中的特有單位,它的大小是由操作系統(tǒng)根據手機屏幕密度動態(tài)渲染出來的,1dp 對應多少 px 在不同的設備上,可能是不一致的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容