zoukankan      html  css  js  c++  java
  • 在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();
    	}
  • 相关阅读:
    如何让我domain里的机器都跟domain controller的时间保持一致?
    [PowerShell Utils] Create a list of virtual machines based on configuration read from a CSV file in Hyper-V
    Reboot server stuck at “Press ESC in 1 seconds to skip startup.nsh”
    [PowerShell Utils] Remotely install Hyper-V and Failover Cluster feature on a list of windows 2012 servers
    [PowerShell Utils] Automatically Change DNS and then Join Domain
    SharePoint 2016 IT Preview的新feature列表
    LeetCode Permutations问题详解
    Rotate Image 旋转图像
    单链表的快速排序(转)
    anagrams 查找序列里具有相同字符但顺序不同的单词
  • 原文地址:https://www.cnblogs.com/riskyer/p/3283254.html
Copyright © 2011-2022 走看看