之前自己一直手工编写函数来实现dip值到px值,今天无意中发现android本身就带有类似的函数来实现这种转换过程,就是 TypedValue.applyDimension

public class TypedValueApiUseDemoActivity extends AppCompatActivity {

    public static final String TAG = "xp.chen";

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_typed_value_api_use_demo); int dipValue = 20; float density = getResources().getDisplayMetrics().density;
int finalPx = (int) (dipValue * density); int pxValue = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, getResources().getDisplayMetrics()); Log.i(TAG, "finalPx: "+finalPx+", pxValue: "+pxValue); }
}

Log:

I/xp.chen: finalPx: 60, pxValue: 60

查看下源码,android的实现和我们自己的实现是一样的:

/**
* 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;
}

最新文章

  1. sourcesafe.light 开源项目启动
  2. Linux Linux程序练习十六(进程间的通信信号版)
  3. [转发]dsdt解决睡眠唤醒死机
  4. SQL where 1=1的作用
  5. php 接口 implements 使用
  6. Android的Toast介绍-android学习之旅(三十六)
  7. Struts 2 标签
  8. 【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对照
  9. BZOJ 2142: 礼物 [Lucas定理]
  10. Web SCADA 电力接线图工控组态编辑器
  11. python日志等级输出删选
  12. Codeforces 420D Cup Trick 平衡树
  13. 在Qt项目中添加全局宏变量来达到按方案编译的目的
  14. 使用LibreOffice修复受损的Office文档
  15. java中的数据加密3 非对称加密
  16. 为什么你作为一个.NET的程序员工资那么低?(转)
  17. SpringBoot Cmd运行Jar文件指定active文件的命令如下
  18. Using XmlHttpRequest 写JSON网页
  19. [Android开发那点破事]解决android.os.NetworkOnMainThreadException
  20. nuxt.js引入客户端脚本和第三方库出现window/document/ navigator未定义问题

热门文章

  1. 搭建MySQL MMM高可用
  2. http://www.easytest.xyz/login_action/
  3. Multiple network matches found for name &#39;selfservice&#39;, use an ID to be more specific.报错
  4. Codeforces H. Maximal GCD(贪心)
  5. python网络-静态Web服务器案例(29)
  6. 如何在linux环境下配置环境变量
  7. c语言中字符串转数字的函数
  8. Hibernate框架的查询方式
  9. 完美字符子串 单调队列预处理+DP线段树优化
  10. babyheap_fastbin_attack