在java代码中进行px与dip(dp)、px与sp单位值的转换

    其实都是以前保存的代码,最近发现自己的资料库很混乱,索性都整理成博客,方便以后自己要用的时候快速找到。

DisplayUtil.java

/**
* 单位转换工具
*
* @author carrey
*
*/
public class DisplayUtil {
/**
* 将px值转换为dip或dp值,保证尺寸大小不变
*
* @param pxValue
* @param scale
* (DisplayMetrics类中属性density)
* @return
*/
public static int px2dip(float pxValue, float scale) {
return (int) (pxValue / scale + 0.5f);
} /**
* 将dip或dp值转换为px值,保证尺寸大小不变
*
* @param dipValue
* @param scale
* (DisplayMetrics类中属性density)
* @return
*/
public static int dip2px(float dipValue, float scale) {
return (int) (dipValue * scale + 0.5f);
} /**
* 将px值转换为sp值,保证文字大小不变
*
* @param pxValue
* @param fontScale
* (DisplayMetrics类中属性scaledDensity)
* @return
*/
public static int px2sp(float pxValue, float fontScale) {
return (int) (pxValue / fontScale + 0.5f);
} /**
* 将sp值转换为px值,保证文字大小不变
*
* @param spValue
* @param fontScale
* (DisplayMetrics类中属性scaledDensity)
* @return
*/
public static int sp2px(float spValue, float fontScale) {
return (int) (spValue * fontScale + 0.5f);
}
}

DisplayParams.java

/**
* 屏幕参数工具
*
* @author carrey
*
*/
public class DisplayParams {
/** 屏幕宽度——px */
public int screenWidth;
/** 屏幕高度——px */
public int screenHeight;
/** 屏幕密度——dpi */
public int densityDpi;
/** 缩放系数——densityDpi/160 */
public float scale;
/** 文字缩放系数 */
public float fontScale;
/** 屏幕朝向 */
public int screenOrientation;
/** 表示屏幕朝向垂直 */
public final static int SCREEN_ORIENTATION_VERTICAL = 1;
/** 表示屏幕朝向水平 */
public final static int SCREEN_ORIENTATION_HORIZONTAL = 2; private static DisplayParams singleInstance; /**
* 私有构造方法
*
* @param context
*/
private DisplayParams(Context context) {
DisplayMetrics dm = context.getResources().getDisplayMetrics();
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
densityDpi = dm.densityDpi;
scale = dm.density;
fontScale = dm.scaledDensity;
screenOrientation = screenHeight > screenWidth ? SCREEN_ORIENTATION_VERTICAL
: SCREEN_ORIENTATION_HORIZONTAL;
} /**
* 获取实例
*
* @param context
* @return
*/
public static DisplayParams getInstance(Context context) {
if (singleInstance == null) {
singleInstance = new DisplayParams(context);
}
return singleInstance;
} /**
* 获取新的实例
*
* @param context
* @return
*/
public static DisplayParams getNewInstance(Context context) {
if (singleInstance != null) {
singleInstance = null;
}
return getInstance(context);
}
}

使用示例:

	/**
* 设置文本大小
* @param textSizeSp 文本大小,单位是sp
*/
public void setTextSize(int textSizeSp) {
DisplayParams displayParams = DisplayParams.getInstance(context);
this.textSize = DisplayUtil.sp2px(textSize, displayParams.fontScale);
invalidate();
}
上一篇:OSG快速生成一个带有纹理的四边形Geometry


下一篇:1645: [Usaco2007 Open]City Horizon 城市地平线