~android-sdk\sources\android-17\android\util\TypedValue.java 中的函数:

/**

* Converts an unpacked complex data value holding a dimension to its final floating
* point value. The two parameters <var>unit</var> and <var>value</var>
* are as in {@link #TYPE_DIMENSION}.
*
* @param unit The unit to convert from.
* @param value The value to apply the unit to.
* @param metrics Current display metrics to use in the conversion --
* supplies display density and scaling information.
*
* @return The complex floating point value multiplied by the appropriate
* metrics depending on its unit.
*/
public static float applyDimension(int unit, float value,
DisplayMetrics metrics)
{
switch (unit) {
//Value is raw pixels.
case COMPLEX_UNIT_PX:
return value;
//Value is Device Independent Pixels.
case COMPLEX_UNIT_DIP:
return value * metrics.density;
//Value is a scaled pixel.
case COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
//Value is in points.
case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f/72);
//Value is in inches.
case COMPLEX_UNIT_IN:
return value * metrics.xdpi;
//Value is in millimeters.
case COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f/25.4f);
}
return 0;
}

~android-sdk\sources\android-17\android\util\DisplayMetrics.java 中的一些定义:

/**
* Standard quantized DPI for medium-density screens.
*/
public static final int DENSITY_MEDIUM = 160;
/**
* The reference density used throughout the system.
*/
public static final int DENSITY_DEFAULT = DENSITY_MEDIUM;
/**
* The logical density of the display. This is a scaling factor for the
* Density Independent Pixel unit, where one DIP is one pixel on an
* approximately 160 dpi screen (for example a 240x320, 1.5"x2" screen),
* providing the baseline of the system's display. Thus on a 160dpi screen
* this density value will be 1; on a 120 dpi screen it would be .75; etc.
*
* <p>This value does not exactly follow the real screen size (as given by
* {@link #xdpi} and {@link #ydpi}, but rather is used to scale the size of
* the overall UI in steps based on gross changes in the display dpi. For
* example, a 240x320 screen will have a density of 1 even if its width is
* 1.8", 1.3", etc. However, if the screen resolution is increased to
* 320x480 but the screen size remained 1.5"x2" then the density would be
* increased (probably to 1.5).
*
* @see #DENSITY_DEFAULT
*/
public float density;
//默认值 density = DENSITY_DEVICE / (float) DENSITY_DEFAULT;



/**
* A scaling factor for fonts displayed on the display. This is the same
* as {@link #density}, except that it may be adjusted in smaller
* increments at runtime based on a user preference for the font size.
*/
public float scaledDensity;
//默认值 scaledDensity = density;

/**The exact physical pixels per inch of the screen in the X dimension.
*/
public float xdpi;
//默认值xdpi = DENSITY_DEVICE;

更多相关文章

  1. 箭头函数的基础使用
  2. Python技巧匿名函数、回调函数和高阶函数
  3. Android(安卓)TabSwitcher自定义控件
  4. android 之 Attr的使用
  5. Android自定义Toast 解决关闭通知 Toast无法弹出
  6. [置顶] android AIDL 进程间通信
  7. android画日历
  8. 高德地图Android,绘制自定义定位蓝点、marker、面
  9. Android(安卓)Camera框架分析

随机推荐

  1. Android 自定义view(二) 如何实现自定义
  2. Android DeepLink原理与应用(2)
  3. android加速度传感器Accelerometer
  4. You must call removeView() on the chil
  5. 使用 Android NDK 的一般方法:
  6. Android实现点击事件的4种方式
  7. Android中的okHttp
  8. Android(安卓)Lottie动画实战踩坑
  9. 在Visual Studio 2010/2012/2013/2015上
  10. Android Studio教程从入门到精通