在项目中,为了适配所有的屏幕,有时候会使用到dip和px之间的转换
dip 称为设备独立像素,在不同的移动设备上,有着不同的显示效果,与设备的显示器的单位像素点有关。
px则是真是的物理像素,1px就是一个真实像素点。
举例说明一下独立像素与真实像素的区别
比如,在横向480px的设备上绘制宽度为240px的区域,这时,正好绘制的宽度是总宽度的一半,但是当在屏幕宽度为960px的设备上运行时,就会只占到宽度的1/4,这样的话,就不能达到屏幕适配的目的了。如果使用的是dip,或是dp,sp,如果设置为宽度为240dp(建议sp用来设置字体大小),那么就是把屏幕宽度分为了480份,它占240份,无论是在宽度为960px还是480px的屏幕上,都会占到宽度的一半。这就是无关像素点的好处。
下面所以下两种转换方式
/** * dip转换像素px */ public static int dip2px(Context context, float dpValue) { try { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } catch (Exception e) { e.printStackTrace(); } return (int) dpValue; }
/** * 像素px转dip * * @param context * @param pxValue * @return */ public static int px2dip(Context context, float pxValue) { try { /**获得屏幕分辨率**/ final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } catch (Exception e) { e.printStackTrace(); } return (int) pxValue; }