Android 之數值單位轉換

以前都是這麼用:

//轉換dip爲px 
public static int convertDipOrPx(Context context, int dip) { 
    float scale = context.getResources().getDisplayMetrics().density; 
    return (int)(dip*scale + 0.5f*(dip>=0?1:-1)); 
} 

//轉換px爲dip 
public static int convertPxOrDip(Context context, int px) { 
    float scale = context.getResources().getDisplayMetrics().density; 
    return (int)(px/scale + 0.5f*(px>=0?1:-1)); 
}

現在可以這麼做:

//把數值轉換爲各種單位響應的數值:
//以下是轉換爲單位是DIP
int padding = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,4, getActivity().getResources().getDisplayMetrics());

關於TypedValue.applyDimension的源碼是這樣的:

public static float applyDimension(int unit, float value,
                                       DisplayMetrics metrics)
    {
        switch (unit) {
        case COMPLEX_UNIT_PX:
            return value;
        case COMPLEX_UNIT_DIP:
            return value * metrics.density;
        case COMPLEX_UNIT_SP:
            return value * metrics.scaledDensity;
        case COMPLEX_UNIT_PT:
            return value * metrics.xdpi * (1.0f/72);
        case COMPLEX_UNIT_IN:
            return value * metrics.xdpi;
        case COMPLEX_UNIT_MM:
            return value * metrics.xdpi * (1.0f/25.4f);
        }
        return 0;
    }
發佈了53 篇原創文章 · 獲贊 6 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章