Android之TypedValue.applyDimension()方法的使用
2016-09-07 19:53
375 查看
Android之TypedValue.applyDimension()方法的使用
TypedValue是一个工具类,他是一个动态容器。具体是做什么用这里不作介绍了。主要是要了解applyDimension(int unit, float value,DisplayMetrics metrics)方法的使用
先看看该方法的参数表示:
applyDimension(int unit, float value,DisplayMetrics metrics)
参数1:表示单位,其常用单位有如下表示(COMPLEX_UNIT_PX 、COMPLEX_UNIT_DIP、COMPLEX_UNIT_SP、COMPLEX_UNIT_PT、COMPLEX_UNIT_IN、COMPLEX_UNIT_MM )
参数2:表示单位对应值的大小
参数3:封装了显示区域的各种属性值
然后看一下源码:
/** * 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; }
有上面我们可以看出,该方法最主要的功能就是将我们所对应的单位的值转换成屏幕上实际显示的像素(px)值
dp -> px
sp -> px
pt -> px
in -> px
mm -> px
上面所有单位的值,我们都可以通过该方法转换成对应的屏幕上显示的实际像素值
由于上面的方法只能将其他单位转换成px单位,下面介绍下具体的
dp -> px
px -> dp
sp -> px
px -> sp
//转换dp为px public static int convertDipToPx(Context context, int dip) { float scale = context.getResources().getDisplayMetrics().density; return (int) (dip * scale + 0.5f * (dip >= 0 ? 1 : -1)); } //转换px为dp public static int convertPxToDip(Context context, int px) { float scale = context.getResources().getDisplayMetrics().density; return (int) (px / scale + 0.5f * (px >= 0 ? 1 : -1)); } //转换sp为px public static int spTopx(Context context, float spValue) { float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); } //转换px为sp public static int pxTosp(Context context, float pxValue) { float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); }
相关文章推荐
- Android对数据库的基本操作
- iOS中使用dispatch_once实现单例及注意事项
- cocos Lua 计算中英文字符串长度封装接口
- 顶部图片循环播放开源库Android-ConvenientBanner的使用。。。
- iOS经典讲解之图片拉伸的几种方法
- Android源码——应用程序的消息处理机制
- Android中关于定制Toast使用总结
- Android里WebView详解(二)
- [iOS]__attribute__
- BottomSheet 的详解及注意事项
- Android实现简单计算器
- Android 动态改变Layout的大小
- Handler/synchronized/Actvitiy、Application
- Android studio 生成apk的位置
- Android下的Nine-Patch图片制作总结
- android程序切换屏幕或者f返回到桌面,用什么方法还原
- leetcode 42.Trapping Rain Water
- Android 关于日历的搭建
- Android 关于日历的搭建
- Android5.0新特性:主题样式