一个像素转换工具类的实现——dp,px,sp之间的相互转换
来源:互联网 发布:12377网络举报有用吗 编辑:程序博客网 时间:2024/05/22 14:20
什么是dp,px,sp
dp :在Android中dp(也即dip,device independent pixels,设备独立像素),一个基于density的抽象单位,不依赖于像素,推荐使用。当densityDip=160时,1dp=1px。
px:pixels(像素),即就是屏幕的像素点。
sp:同dp相似,但还会根据用户的字体大小偏好来缩放(一般建议使用sp作为文本的单位,其它用dp)
dip介绍
- QVGA: density=0.75(120/160) densityDpi=120 QVGA(240*320)
- HVGA:density=1.0(160/160) densityDpi=160 HVGA(320*480)
- WVGA:density = 1.5(240/160) densityDpi=240 WVGA(480*800)
- WQVGA:density=2.0 densityDpi=120 WQVGA(240*400)
densityDip值表示每英寸有多少个显示点
我们一般在项目中会定义多个适配资源文件夹(values-XXX,drawable-XXX等)
- drawable-ldpi: 屏幕密度为120的手机设备
- drawable-mdpi: 屏幕密度为160的手机设备(此为baseline,其他均以此为基准,在此设备上,1dp = 1px)
- drawable-hdpi: 屏幕密度为240的手机设备
- drawable-xhdpi: 屏幕密度为320的手机设备
drawable-xxhdpi:屏幕密度为480的手机设备
dp与px之间相互转换
1.dp与px的换算公式:
dips=(pixs*160)/densityDpi
pixs =dips * (densityDpi/160)
2.dp与px的代码实现:
注意在代码里面进行转化的时候还需要有一个偏移值:0.5f
/** * dp转 px. * * @param dipValue * @return the int */ public static int dp2px(float dipValue) { final float scale = mContext.getResources().getDisplayMetrics().densityDpi; return (int) (dipValue * (scale / 160) + 0.5f); } /** * px转dp. * * @param pxValue * @return the int */ public static int px2dp(float pxValue) { final float scale = mContext.getResources().getDisplayMetrics().densityDpi; return (int) ((pxValue * 160) / scale + 0.5f); }
sp与px转换
/** * sp转px. * * @param spValue the value * @return the int */ public static int sp2px(float spValue ) { Resources r; if (mContext == null) { r = Resources.getSystem(); } else { r = mContext.getResources(); } float pxValue = spValue * r.getDisplayMetrics().scaledDensity; return (int) (pxValue + 0.5f); }/** * px转sp. * * @param pxValue the value * @return the int */ public static int px2sp(float pxValue) { final float scale = mContext.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / scale + 0.5f); }
关于什么是ppi
PPI = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数
e.g. iphone5的ppi是多少?ppi=√(1136px² + 640px²)/4 in=326ppi(视网膜Retina屏).
0 0
- 一个像素转换工具类的实现——dp,px,sp之间的相互转换
- dp & px & sp 之间的相互转换
- Android工具类---dp,px,sp之间的转换
- Android中dp、sp与px之间的相互转换
- dp、sp和px的相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- Android px、dp、sp之间相互转换
- 网卡驱动和队列层中的数据包接收
- TCP的拥塞控制
- java int转String所有方式的效率对比与深入解析
- Android 双击返回键退出应用程序
- webservice框架
- 一个像素转换工具类的实现——dp,px,sp之间的相互转换
- spring中的cron表达式
- 关于typedef的用法总结
- 使用Euclidean法求乘法逆
- 空心三角形
- [C++]bitset用int数组实现
- leetcode 337. House Robber III-动态规划|Java|Python简洁高效
- CSS3新增的有关背景与边框的属性
- JVM之字节码指令简介