Android dp 和 px 互換 (dp px exchange)

為什麼需要知這道這個?因為要算從 server 下載的縮圖的版本是多少px 的,畫面製作是用 dp, 實際圖片是 px.

dp

Density-independent pixel,獨立於螢幕解析度密度的像素值,也就是說,當你設定 1dp 時,在 120 dpi 的螢幕上會是原本的 75 %,在 160 dpi 的螢幕上為 100%,在 240 dpi 的螢幕上為 150%,實際的像素值會依螢幕密度而改變。

px

pixel ,一般所認知的像素值,指定多少就是多少,不會因螢幕密度不同而改變。所以 100 * 100 px 的方形在 320 x 480 螢幕的手機上看起來會比 1280 x 720 的螢幕上看起來大很多,這個方形實際上尺寸並沒有改變,改變的是螢幕解析度,放在一個較小的空間看起來比較大,放在一個較大的空間,看起來就會比較小。 這裡有圖示解說,看圖比較容易懂。

轉換

/**
 * Covert dp to px
 * @param dp
 * @param context
 * @return pixel
 */
public static float convertDpToPixel(float dp, Context context){
    float px = dp * getDensity(context);
    return px;
}
/**
 * Covert px to dp
 * @param px
 * @param context
 * @return dp
 */
public static float convertPixelToDp(float px, Context context){
    float dp = px / getDensity(context);
    return dp;
}
/**
 * 取得螢幕密度
 * 120dpi = 0.75
 * 160dpi = 1 (default)
 * 240dpi = 1.5
 * @param context
 * @return
 */
public static float getDensity(Context context){
 DisplayMetrics metrics = context.getResources().getDisplayMetrics();
 return metrics.density;
}

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *