网上 dp2px 和 px2dp 公式:

  public static int px2dip(Context context, float pxValue) {         final float scale = context.getResources().getDisplayMetrics().density;         return (int) (pxValue / scale + 0.5f);    }          public static int dip2px(Context context, float dipValue) {         final float scale = context.getResources().getDisplayMetrics().density;         return (int) (dipValue * scale + 0.5f);    }
这两个公式网上很多,但为什么 最后都要加上0.5f 呢?

 按正常的推理应该是  dip = pxValue / scale 和 px = dipValue * scale ,

实际上准确的值就应该是 咱们推理出来的,之所以后面加上0.5f是因为 咱们要的只不是那么精准,根据推理算出来的是个浮点数,而咱们程序中一般使用int类型就够了,这里涉及到一个类型转换精准度问题,熟悉java特效的同学应该知道

float 类型的 4.1 和4.9 强转成int类型后,会失去精准度变成 int类型的4, 而如果咱们想四舍五入的话,把他们都加上0.5f,这样转换出来的结果就是:

4.4 + 0.5 = 4.9 转为int 还是4,而4.5 + 0.5 = 5.0 转换成int后就是5,正好是四舍五入,这样就保证了咱们算出来的值相对精准。









      

更多相关文章

  1. Android 手势类型与识别
  2. android:MATCH_PARENT是什么类型的布局
  3. android下的文件资源类型
  4. android输入子设备类型
  5. Android 设备网络信息的获取(网络类型、网络强度、网络速度、代理

随机推荐

  1. Kotlin 风险高、RxJava 已过时,Android 原
  2. Android实现EventBus登录界面与传值(粘性
  3. 浅析Android下的Android.mk文件
  4. Android中Math取整的三个方法
  5. android recovery 系统代码分析 -- 选择
  6. Activity、Bundle、请求码与结果码、Inte
  7. 深入理解dvm和jvm
  8. Android(安卓)2.3及以上版本支持自定义的
  9. Android studio中的警告Hardcoded text
  10. Android插件化框架系列之类加载器