根据屏幕密度进行二者的转换
/**
* px转换dip
*/
public static int px2dip(Context context, int px) {
if (px <= 0 || context == null) {
return 0;
}
final float scale = getScreenDensity(context);
return (int) (px / scale + 0.5f);
}
/**
*dip转换px
*/
public static float dp2px(Context context, int dp) {
if (dp <= 0 || context == null) {
return 0;
}
float result = 0f;
result = (int) (getScreenDensity(context) * dp + 0.5);
return result;
}
/**
* px转换dip 多个数据
*/
public static int[] px2dipList(Context context, int[] pxList) {
final float scale = getScreenDensity(context);
for (int i = 0; i < pxList.length; i++) {
if (pxList[i] <= 0 || context == null) {
pxList[i] = 0;
} else {
pxList[i] = (int) (pxList[i] / scale + 0.5f);
}
}
return pxList;
}
/**
* dip转换px 多个数据
*/
public static float[] dp2pxList(Context context, float[] dpList) {
final float scale = getScreenDensity(context);
for (int i = 0; i < dpList.length; i++) {
if (dpList[i] <= 0 || context == null) {
dpList[i] = 0f;
} else {
float result = 0f;
result = (int) (scale * dpList[i] + 0.5);
dpList[i] = result;
}
}
return dpList;
}
/**
* 获取屏幕密度
*
* @param context
* @return
*/
public static float getScreenDensity(Context context) {
if (context == null) {
return 0.0f;
}
DisplayMetrics dm = new DisplayMetrics();
dm = context.getResources().getDisplayMetrics();
return dm.density;
}