天天看點

Android中dp與px之間轉換

作為Android開發者,大家對美工(或UI)給的界面圖一定很抓狂,項目的界面都是以IOS為标準,控件之間的間距、字型大小都是使用px,然而作為Android開發人員都知道我們都是使用dp和sp ,為了使dp或sp變成px,大家一定常用如下方法進行轉換:

/** 
 * dp 轉成為 px(像素) 
 */  
public static int dip2px(Context context, float dpValue) {  
    final float scale = context.getResources().getDisplayMetrics().density;  
    return (int) (dpValue * scale + f);  
}  

/** 
 * px(像素) 轉成為 dp 
 */  
public static int px2dip(Context context, float pxValue) {  
    final float scale = context.getResources().getDisplayMetrics().density;  
    return (int) (pxValue / scale + f);  
}
           

下面介紹官方TypedValue這個類提供的轉換方法:

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 * (f/);
        case COMPLEX_UNIT_IN:
            return value * metrics.xdpi;
        case COMPLEX_UNIT_MM:
            return value * metrics.xdpi * (f/f);
        }
        return ;
    }
           

這樣,根據我們的項目需求調用源碼方法寫公共轉換方法。大家想怎麼轉換,隻需改下unit值就可以,下面舉個例子:

/**
 * dip轉px
 */
public static int dpToPx(Context context, float dp) {
        return (int) TypedValue.applyDimension(
        TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
    }
           

如有錯誤,敬請指正。