曾经在处理图片过程中遇到这样一个情况:小米大屏手机上各种友好展示,但是在三星手机上,各种横七竖八、错位现象。
当然距离单位用dp,文字单位用sp,这大家都知道!在布局文件中我们我们用了dp,现实要求我们动态改变这些值,但很多控件不支持dp。这时我们需要把dp值转换成px。
注意了:是把dp值转为px,我就在这失误了。不说了,直接上实现:
public class DisplayUtils {
private static DisplayMetrics sDisplayMetrics;
private static final float ROUND_DIFFERENCE = 0.5f;
/**
* 初始化操作
*
* @param context context
*/
public static void init(Context context) {
sDisplayMetrics = context.getResources().getDisplayMetrics();
}
/**
* 获取屏幕宽度 单位:像素
*
* @return 屏幕宽度
*/
public static int getWidthPixels() {
return sDisplayMetrics.widthPixels;
}
/**
* 获取屏幕高度 单位:像素
*
* @return 屏幕高度
*/
public static int getHeightPixels() {
return sDisplayMetrics.heightPixels;
}
/**
* 获取屏幕宽度 单位:像素
*
* @return 屏幕宽度
*/
public static float getDensity() {
return sDisplayMetrics.density;
}
/**
* dp 转 px
*
* @param dp dp值
* @return 转换后的像素值
*/
public static int dp2px(int dp) {
return (int) (dp * sDisplayMetrics.density + ROUND_DIFFERENCE);
}
/**
* dp 转 px
*
* @param dp dp值
* @return 转换后的像素值
*/
public static float dp2px(float dp) {
return dp * sDisplayMetrics.density + ROUND_DIFFERENCE;
}
/**
* px 转 dp
*
* @param px px值
* @return 转换后的dp值
*/
public static int px2dp(int px) {
return (int) (px / sDisplayMetrics.density + ROUND_DIFFERENCE);
}
这个小知识点希望能帮到你!