Android里面的dp到底咋和px进行转化?

Android里面的dp到底咋和px进行转化?

Android小彩虹2021-08-19 2:50:52200A+A-

很多刚接触 Android 开发的小伙伴,对于这个dp 一脸懵逼,百度了很久,也是一些计算dpi 的方法,根本没有讲到点子上!

结论

先说结论,dp要和px转化,要用到Android里面的density

公式是: 1 d p = d e n s i t y × 1 p x 1dp=density×1px

density可以在代码里获取

Context.resources.displayMetrics.density

转化为代码就是(输入dp值,转化为px)

fun Context.dpToPx(dp: Float): Float {
  val density: Float = this.resources.displayMetrics.density
  return (dp * density * if (dp >= 0) 1 else -1)
}

转化也很简单,直接套公式就行

原理

这个是一个GoogleAndroid的一个规定

dpi160的时候,1dp=1px

dpdpi等比例增大

公式为: d e n s i t y = d p i / 160 density=dpi/160

ps

以上的density均为代码里面的density

如果你用adb命令的时候,会有一个

adb shell wm density 160

这个160dpi的意思

dpi也可以在代码里获取,如下:

Context.resources.displayMetrics.densityDpi

思考

有一个小伙伴提了一个很有意思的问题:分辨率相同、尺寸不同的屏幕,将density设为相同的值,显示效果看起来是否一致的呢?

答案是:不一致!

因为相同分辨率下,屏幕越大,像素块就会越大

如果屏幕的像素块的大小是不一样的,那显示效果是不一致的

即使转化出来像素数是一样的,但是像素块的大小是不同的,所以视觉效果是不一样的

结论:1px 就是 屏幕上的一个像素块这个是绝对不会变的!

OVER

如果觉得写得还不错,欢迎点赞,评论,收藏一波

点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链 | 域名展示
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1
本网站由 提供CDN/云存储服务

联系我们