dp,px的转换

转:点击打开链接

DisplayUtil.java

[java]  view plain copy
  1. /** 
  2.  * 单位转换工具 
  3.  *  
  4.  * @author carrey 
  5.  *  
  6.  */  
  7. public class DisplayUtil {  
  8.     /** 
  9.      * 将px值转换为dip或dp值,保证尺寸大小不变 
  10.      *  
  11.      * @param pxValue 
  12.      * @param scale 
  13.      *            (DisplayMetrics类中属性density) 
  14.      * @return 
  15.      */  
  16.     public static int px2dip(float pxValue, float scale) {  
  17.         return (int) (pxValue / scale + 0.5f);  
  18.     }  
  19.   
  20.     /** 
  21.      * 将dip或dp值转换为px值,保证尺寸大小不变 
  22.      *  
  23.      * @param dipValue 
  24.      * @param scale 
  25.      *            (DisplayMetrics类中属性density) 
  26.      * @return 
  27.      */  
  28.     public static int dip2px(float dipValue, float scale) {  
  29.         return (int) (dipValue * scale + 0.5f);  
  30.     }  
  31.   
  32.     /** 
  33.      * 将px值转换为sp值,保证文字大小不变 
  34.      *  
  35.      * @param pxValue 
  36.      * @param fontScale 
  37.      *            (DisplayMetrics类中属性scaledDensity) 
  38.      * @return 
  39.      */  
  40.     public static int px2sp(float pxValue, float fontScale) {  
  41.         return (int) (pxValue / fontScale + 0.5f);  
  42.     }  
  43.   
  44.     /** 
  45.      * 将sp值转换为px值,保证文字大小不变 
  46.      *  
  47.      * @param spValue 
  48.      * @param fontScale 
  49.      *            (DisplayMetrics类中属性scaledDensity) 
  50.      * @return 
  51.      */  
  52.     public static int sp2px(float spValue, float fontScale) {  
  53.         return (int) (spValue * fontScale + 0.5f);  
  54.     }  
  55. }  
DisplayParams.java

[java]  view plain copy
  1. /** 
  2.  * 屏幕参数工具 
  3.  *  
  4.  * @author carrey 
  5.  *  
  6.  */  
  7. public class DisplayParams {  
  8.     /** 屏幕宽度——px */  
  9.     public int screenWidth;  
  10.     /** 屏幕高度——px */  
  11.     public int screenHeight;  
  12.     /** 屏幕密度——dpi */  
  13.     public int densityDpi;  
  14.     /** 缩放系数——densityDpi/160 */  
  15.     public float scale;  
  16.     /** 文字缩放系数 */  
  17.     public float fontScale;  
  18.     /** 屏幕朝向 */  
  19.     public int screenOrientation;  
  20.     /** 表示屏幕朝向垂直 */  
  21.     public final static int SCREEN_ORIENTATION_VERTICAL = 1;  
  22.     /** 表示屏幕朝向水平 */  
  23.     public final static int SCREEN_ORIENTATION_HORIZONTAL = 2;  
  24.   
  25.     private static DisplayParams singleInstance;  
  26.   
  27.     /** 
  28.      * 私有构造方法 
  29.      *  
  30.      * @param context 
  31.      */  
  32.     private DisplayParams(Context context) {  
  33.         DisplayMetrics dm = context.getResources().getDisplayMetrics();  
  34.         screenWidth = dm.widthPixels;  
  35.         screenHeight = dm.heightPixels;  
  36.         densityDpi = dm.densityDpi;  
  37.         scale = dm.density;  
  38.         fontScale = dm.scaledDensity;  
  39.         screenOrientation = screenHeight > screenWidth ? SCREEN_ORIENTATION_VERTICAL  
  40.                 : SCREEN_ORIENTATION_HORIZONTAL;  
  41.     }  
  42.   
  43.     /** 
  44.      * 获取实例 
  45.      *  
  46.      * @param context 
  47.      * @return 
  48.      */  
  49.     public static DisplayParams getInstance(Context context) {  
  50.         if (singleInstance == null) {  
  51.             singleInstance = new DisplayParams(context);  
  52.         }  
  53.         return singleInstance;  
  54.     }  
  55.   
  56.     /** 
  57.      * 获取新的实例 
  58.      *  
  59.      * @param context 
  60.      * @return 
  61.      */  
  62.     public static DisplayParams getNewInstance(Context context) {  
  63.         if (singleInstance != null) {  
  64.             singleInstance = null;  
  65.         }  
  66.         return getInstance(context);  
  67.     }  
  68. }  

使用示例:

[java]  view plain copy
  1. /** 
  2.  * 设置文本大小 
  3.  * @param textSizeSp 文本大小,单位是sp 
  4.  */  
  5. public void setTextSize(int textSizeSp) {  
  6.     DisplayParams displayParams = DisplayParams.getInstance(context);  
  7.     this.textSize = DisplayUtil.sp2px(textSizeSp, displayParams.fontScale);  
  8.     invalidate();  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值