麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統(tǒng) > Android > 正文

android中px和dp,px和sp之間的轉(zhuǎn)換方法

2019-10-21 21:49:57
字體:
供稿:網(wǎng)友

在Android開發(fā)中dp和px,sp和px之間的轉(zhuǎn)換時(shí)必不可少的,網(wǎng)上流傳的方法

public class DisplayUtils {  /**   * convert px to its equivalent dp   * 將px轉(zhuǎn)換為與之相等的dp   */  public static int px2dp(Context context, float pxValue) {    final float scale = context.getResources().getDisplayMetrics().density;    return (int) (pxValue / scale + 0.5f);  }  /**   * convert dp to its equivalent px   * 將dp轉(zhuǎn)換為與之相等的px   */  public static int dp2px(Context context, float dipValue) {    final float scale = context.getResources().getDisplayMetrics().density;    return (int) (dipValue * scale + 0.5f);  }  /**   * convert px to its equivalent sp    * 將px轉(zhuǎn)換為sp   */  public static int px2sp(Context context, float pxValue) {    final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;    return (int) (pxValue / fontScale + 0.5f);  }  /**   * convert sp to its equivalent px   * 將sp轉(zhuǎn)換為px   */  public static int sp2px(Context context, float spValue) {    final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;    return (int) (spValue * fontScale + 0.5f);  }}

關(guān)于轉(zhuǎn)換公式中,通過類比一元一次函數(shù),怎么看都是有問題的,這么明顯的問題,為什么沒人糾正,后來發(fā)現(xiàn)是自己并沒有理解,原因是float類型在強(qiáng)轉(zhuǎn)為int類型是,用的是去尾法,精度上有較大差異,所以通過+0.5f的方式,將去尾法轉(zhuǎn)變成四舍五入法,提高精度。

調(diào)用TypedValue類實(shí)現(xiàn)轉(zhuǎn)換

/*** convert dp to its equivalent px*/protected int dp2px(int dp){    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,getResources().getDisplayMetrics());}/*** convert sp to its equivalent px*/protected int sp2px(int sp){    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp,getResources().getDisplayMetrics());}public class TypedValue {  ...  /** {@link #TYPE_DIMENSION} complex unit: Value is raw pixels. */  public static final int COMPLEX_UNIT_PX = 0;  /** {@link #TYPE_DIMENSION} complex unit: Value is Device Independent   * Pixels. */  public static final int COMPLEX_UNIT_DIP = 1;  /** {@link #TYPE_DIMENSION} complex unit: Value is a scaled pixel. */  public static final int COMPLEX_UNIT_SP = 2;  /** {@link #TYPE_DIMENSION} complex unit: Value is in points. */  public static final int COMPLEX_UNIT_PT = 3;  /** {@link #TYPE_DIMENSION} complex unit: Value is in inches. */  public static final int COMPLEX_UNIT_IN = 4;  /** {@link #TYPE_DIMENSION} complex unit: Value is in millimeters. */  public static final int COMPLEX_UNIT_MM = 5;  /**   * 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) {    case COMPLEX_UNIT_PX:      return value;    case COMPLEX_UNIT_DIP:      return value * metrics.density;    case COMPLEX_UNIT_SP:      return value * metrics.scaledDensity;    case COMPLEX_UNIT_PT:      return value * metrics.xdpi * (1.0f/72);    case COMPLEX_UNIT_IN:      return value * metrics.xdpi;    case COMPLEX_UNIT_MM:      return value * metrics.xdpi * (1.0f/25.4f);    }    return 0;  }  ...}

對比兩種方式的差異,其實(shí)就在+0.5f上,去尾法和四舍五入法的區(qū)別,即精度問題。

總結(jié)

以上所述是小編給大家介紹的android中px和dp,px和sp之間的轉(zhuǎn)換方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對VEVB武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲精品自在在线观看 | 色柚视频网站ww色 | 亚洲综合精品 | 久久狂草 | 日本在线国产 | 欧美成人一区免费视频 | 一本色道久久综合亚洲精品图片 | 亚洲天堂中文字幕在线观看 | 中文国产在线视频 | 国产精品一区在线看 | 一区二区三区欧美日韩 | 成人一区二区三区四区 | 欧美aaaaaaaa | 最新一区二区三区 | 国产91在线免费 | 毛片一区二区三区四区 | 黄色免费高清网站 | 国产精品视频免费网站 | 爱福利视频网 | 国产精品免费视频观看 | 嗯~啊~用力~高h | 黄视频免费在线观看 | 成人小视频免费在线观看 | 欧美一级淫片免费视频黄 | 91精品国产综合久久婷婷香蕉 | 黄色片免费看网站 | 欧美在线观看视频一区 | 一区二区三视频 | 55夜色66夜色国产精品视频 | 国产成人精品免高潮在线观看 | 欧美91看片特黄aaaa | av影院在线播放 | 香蕉黄色网 | 在线高清中文字幕 | 成人免费自拍视频 | 国产午夜亚洲精品午夜鲁丝片 | 超久久 | 青青草最新网址 | 日韩黄a | 免费人成在线播放 | 99视频有精品视频高清 |