• Android屏幕density, dip等相关概念总结


     1、几个术语
    VGA、HVGA、QVGA、WVGA、WQVGA
    这些术语都是指屏幕的分辨率。
    VGA:Video Graphics Array。即:显示画图矩阵。相当于640×480 像素;
    HVGA:Half-size VGA;即:VGA的一半,分辨率为480×320;
    QVGA:Quarter VGA;即:VGA的四分之中的一个,分辨率为320×240;
    WVGA:Wide Video Graphics Array;即:扩大的VGA,分辨率为800×480像素;

    WQVGA:Wide Quarter VGA;即:扩大的QVGA,分辨率比QVGA高,比VGA低。通常是:400×240。480×272。

    下面列出了常见的分辨率类型。
    QVGA = 320 * 240; WQVGA = 320 * 480; WQVGA2 = 400 * 240; WQVGA3 = 432 * 240; HVGA = 480 * 320; VGA = 640 * 480; WVGA = 800 * 480; WVGA2 = 768 * 480; FWVGA = 854 * 480; DVGA = 960 * 640; PAL = 576 * 520; NTSC = 486 * 440; SVGA = 800 * 600; WSVGA = 1024 * 576; XGA = 1024 * 768; XGAPLUS = 1152 * 864; HD720 = 1280 * 720; WXGA = 1280 * 768; WXGA2 = 1280 * 800; WXGA3 = 1280 * 854; SXGA = 1280 * 1024; WXGA4 = 1366 * 768; SXGAMINUS = 1280 * 960; SXGAPLUS = 1400 * 1050; WXGAPLUS = 1440 * 900; HD900 = 1600 * 900; WSXGA = 1600 * 1024; WSXGAPLUS = 1680 * 1050; UXGA = 1600 * 1200; HD1080 = 1920 * 1080; QWXGA = 2048 * 1152; WUXGA = 1920 * 1200; TXGA = 1920 * 1400; QXGA = 2048 * 1536; WQHD = 2560 * 1440; WQXGA = 2560 * 1600; QSXGA = 2560 * 2048; QSXGAPLUS = 2800 * 2100; WQSXGA = 3200 * 2048; QUXGA = 3200 * 2400; QFHD = 3840 * 2160; WQUXGA = 3840 * 2400; HD4K = 4096 * 2304; HXGA = 4096 * 3072; WHXGA = 5120 * 3200; HSXGA = 5120 * 4096; WHSXGA = 6400 * 4096; HUXGA = 6400 * 4800; SHV = 7680 * 4320; WHUXGA = 7680 * 4800;


    px:(pixels)(像素):屏幕上的点,表示屏幕实际的象素,与密度相关。密度大了,单位面积上的px会比較多。比如。320*480的屏幕在横向有320个象素,在纵向有480个象素。

    dip或dp(与密度无关的像素)。

    这个和设备硬件有关。为了支持WVGA、HVGA和QVGA 5进制空间推荐使用这个。

    一种基于屏幕密度的抽象单位。设置一些view的宽高能够用这个,普通情况下。在不同分辨率。都不会有缩放的感觉。

     px与dip的换算公式:
    px = (density/160)*dip density一般为3个经常使用固定值240/160/120

    scaledDensity (字体缩放比例)。即 单位 sp 的 换算值。 一般用在设定字体大小中
    sp放大像素– 主要处理字体的大小。dp是与密度无关,sp除了与密度无关外,还与scale无关。


    sp与px的换算公式:

    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    pixelSize = (int)scaledPixelSize * dm.scaledDensity; 
    in:表示英寸,是屏幕的物理尺寸。每英寸等于2.54厘米。比如,形容手机屏幕大小,常常说,3.2(英)寸、3.5(英)寸、4(英)寸就是指这个单位。这些尺寸是屏幕的对角线长度。

    假设手机的屏幕是3.2英寸,表示手机的屏幕(可视区域)对角线长度是3.2*2.54 = 8.128厘米
     pt:表示一个点。是屏幕的一个物理长度,大小为1英寸的1/72。


     密度Density:依据像素分辨率。在屏幕指定物理宽高范围内能显示的像素数量,一般为一英寸能显示的像素。


    2、一些參数
     常见手机屏幕分辩率(希望大家能够补充)
     小米3
    density=3.0, width=1080, height=1920, scaledDensity=3.0, xdpi=449.704, ydpi=447.412
    小米2
    density=2.0, width=720, height=1280, scaledDensity=2.0, xdpi=345.0566, ydpi=342.23157
    魅族3
    density=2.5, width=1080, height=1800, scaledDensity=2.5, xdpi=415.636, ydpi=415.636
    三星s3
    density=2.0, width=720, height=1280, scaledDensity=2.0, xdpi=304.8, ydpi=306.716
    Motorola Me525 Android2.2.2
    density=1.5, width=480, height=854, scaledDensity=1.5, xdpi=144.0, ydpi=144.0


     屏幕大小和密度对比表
     屏幕                 宽度          高度           尺寸          大小     密度  
      Type              (Pixels)     (Pixels)   Range (inches)      Size      Group
      
      QVGA                240          320        2.6 - 3.0         Small      Low
      WQVGA            240          400        3.2 - 3.5         Normal     Low
      FWQVGA          240          432        3.5 - 3.8         Normal     Low
      HVGA                320          480        3.0 - 3.5         Normal     Medium
      WVGA               480          800        3.3 - 4.0         Normal     High
      FWVGA             480          854        3.5 - 4.0         Normal     High
      WVGA               480          800        4.8 - 5.5         Large      Medium
      FWVGA             480          854        5.0 - 5.8         Large      Medium

    3、一些实用的代码

    mport android.content.Context;
    import android.util.DisplayMetrics;
    
    /**
     * 计算公式 pixels = dips * (density / 160)
     * 
     * @version 1.0.1 2010-12-11
     * 
     * @author
     */
    public class DensityUtil {
    	
    	private static final String TAG = DensityUtil.class.getSimpleName();
    	
    	// 当前屏幕的densityDpi
    	private static float dmDensityDpi = 0.0f;
    	private static DisplayMetrics dm;
    	private static float scale = 0.0f;
    
    	/**
    	 * 
    	 * 依据构造函数获得当前手机的屏幕系数
    	 * 
    	 * */
    	public DensityUtil(Context context) {
    		// 获取当前屏幕
    		dm = new DisplayMetrics();
    		dm = context.getApplicationContext().getResources().getDisplayMetrics();
    		// 设置DensityDpi
    		setDmDensityDpi(dm.densityDpi);
    		// 密度因子
    		scale = getDmDensityDpi() / 160;
    		Logger.i(TAG, toString());
    	}
    
    	/**
    	 * 当前屏幕的density因子
    	 * 
    	 * @param DmDensity
    	 * @retrun DmDensity Getter
    	 * */
    	public static float getDmDensityDpi() {
    		return dmDensityDpi;
    	}
    
    	/**
    	 * 当前屏幕的density因子
    	 * 
    	 * @param DmDensity
    	 * @retrun DmDensity Setter
    	 * */
    	public static void setDmDensityDpi(float dmDensityDpi) {
    		DensityUtil.dmDensityDpi = dmDensityDpi;
    	}
    
    	/**
    	 * 密度转换像素
    	 * */
    	public static int dip2px(float dipValue) {
    
    		return (int) (dipValue * scale + 0.5f);
    
    	}
    
    	/**
    	 * 像素转换密度
    	 * */
    	public int px2dip(float pxValue) {
    		return (int) (pxValue / scale + 0.5f);
    	}
    
    	@Override
    	public String toString() {
    		return " dmDensityDpi:" + dmDensityDpi;
    	}
    }



  • 相关阅读:
    Hadoop伪分布式环境安装
    记一次Xshell配置ssh免密登录时的问题
    HDFS学习笔记二
    HDFS学习笔记一
    十万级百万级数据量的Excel文件导入并写入数据库
    javascript内置对象:Date
    内置对象:Math
    javascript内置对象一:String
    javascript内置对象一: Array数组
    Javascritp 数据结构和二叉树算法
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6708089.html
Copyright © 2020-2023  润新知