像素密度计算

像素密度计算为解决Android设备碎片化,引入一个概念density,也就是密度.它指的是在一定尺寸的物理屏幕上显示像素的数量,一般使用dpi(dotsperinch,每英寸像素数)作为单位.比如设备分辨率为240×320,屏幕物理尺寸为1.5英寸x2英寸(对角线为2.5),它的密度可以用分辨率/尺寸表示:240/1.5或者即320/2,密度为160dpi。算对角线也是一样的,长的平方+宽的平…

大家好,又见面了,我是你们的朋友全栈君。

为解决Android设备碎片化,引入一个概念density,也就是密度.它指的是在一定尺寸的物理屏幕上显示像素的数量,一般使用dpi(dots per inch,每英寸像素数)作为单位.
比如设备分辨率为240×320,屏幕物理尺寸为1.5英寸x2英寸(对角线为2.5), 它的密度可以用分辨率/尺寸表示:240/1.5或者即320/2,密度为160dpi。 算对角线也是一样的,
长的平方+宽的平方=160000,开方后=400.可知400/2.5=160.
对于用户来说,密度越大的屏幕显示效果越精细,因为每英寸显示的像素数量更多。  
 以上的描述就是一个蓝本(此蓝本对应于mdpi). 按照此蓝本一个dp相当于160dpi屏幕中的一个px.同理在,在320dpi的屏幕中,一个dp相当于2个px.   通过这样的成比例放缩,Android解决了需要多个不同屏幕中的大小显示问题.   所以在Eclipse的布局文件中,以3.7in WVGA(Nexus One)(480×800)为例,可以看见其为sw320dp,h533dp.   即宽有320dp,高为533dp.   是怎么计算出来的呢?   将(480的平方+800的平方)开方=932.9523031   然后932.9523031/屏幕尺寸3.7=252.14927,此结果为此手机的屏幕密度.

然后按照上面的蓝本,就应该要计算在该手机上1dp对于多少px.计算如下: 160 1dp=1px   252.14927 1dp=?px   
  结果为:   252.14927/160=1.5759329  
  注意:   在此一般不取1.5759329,只取到1.5即可.   所以:480/1.5=320;800/1.5=533.3333(通常取为533),即上述的sw320dp,h533dp.

手机屏幕密度的对应关系 :

120上下浮动的都属于ldpi   160上下浮动的都属于mdpi   240上下浮动的都属于hdpi   320上下浮动的都属于xdpi   
以摩托罗拉ME525+(3.7英寸 分辨率854×480像素)为例:   将(480的平方+854的平方)开方=979.6509   然后979.6509/屏幕尺寸3.7=264.770529,此结果为此手机的屏幕密度.对应为hdpi   264.770529/160=1.6548   即在此手机中1dp=1.6548个像素,只取到1.6即可   所以:480/1.6=300;854/1.6=533.75(通常取为533)   按照这个逻辑,算出来的宽应该是只有300dp.悲剧的是,如果某个控件的宽为300,在此手机上是不能铺满手机的宽的.   也就是说除以的不是1.6而还是1.5!!!所以将宽设置为320即可   总结:在hdpi中,像素转换为dp统一用的是:像素/1.5;
  
以联想K860(5.0英寸,分辨率1280×720像素)为例:   将(1280的平方+720的平方)开方=1468.60478   然后1468.60478/屏幕尺寸5=293.720,此结果为此手机的屏幕密度.对应为xdpi   293.720/160=1.8357   即在此手机中1dp=1.8357个像素   所以:1280/1.8357=697.281;720/1.8357=392.22   按照这个逻辑,算出来的宽应该是392.22.悲剧的是,如果某个控件的宽为392.22,在此手机上是显示不完全的.   也就是说除以的不是1.8而是2!!!所以将宽设置为360即可   
总结:在xdpi中,像素转换为dp统一用的是:像素/2

注意问题1:   在建立模拟器的时候注意   854×480在Hardware中,应该将Abstracted LCD density设置为240,并手动输入分辨率   1280×720在Hardware中,应该将Abstracted LCD density设置为320,并手动输入分辨率   
注意问题2:   多个layout文件夹在命名上有相应规则,以分辨率480×854为例,需要建立480×854像素的layout文件夹,命名:layout-854×480,有两点需要注意:①大数(854)必须在前,   否则会报错;②两个数字之间的符号是小写英文字母“x”,不是乘号

每英寸像素(10802280 5.84寸)=(10801080+2280*2280 )^0.5 =2522(对角线长度) ,像素密度=2522/5.84=431.9dpi 对应为xxhdpi 431.9/160= 2.69 (一个dp=2.69个像素) ,1080/2.69=401
280/2.69=847 ,控件宽为401,在手机上是显示不完全的,也就是说除以的不是2.69而是3,因此宽为360高为760。总结:在xxhdpi中,像素转换为dp统一用的是:像素/3

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130891.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • efishell无法开机shell_开机出现efi shell卡住不动了解决方法全集「建议收藏」

    efishell无法开机shell_开机出现efi shell卡住不动了解决方法全集「建议收藏」[文章导读]最近有很多网友问我,为什么我的电脑开机后出现efishell提示进不了系统,开机出现efishell提示时,一般是由于第一启动项设置的是efishell启动的,有的网友告诉我,我第一启动项明明设置的是硬盘启动,当然还有一种情况就是前面的启动项都无法加载,然后按启动顺序启动,然后就启动到efishell了,出现这种情况一般就是系统引导破坏或是找不到引导项了。那么怎么找到原并解决…

    2022年7月24日
    9
  • 微信集赞作弊_朋友圈分享集赞是非法行为吗

    微信集赞作弊_朋友圈分享集赞是非法行为吗从古至今,无论是征战沙场的猛将,还是心怀天下的文豪,抑或探索人生真理的大哲学家,都将“独立、自由”等当做人之所以为人的奋斗目标和根本标准。但可惜的是,无论是外来环境、文化的影响,还是内在的个人成长过程,都缺乏对“独立、自由”的尊重和支撑。而在当下的移动互联网时代,以微信为代表的社交应用,更是在某种程度上扼杀着大众的独立和自由。虽然这并不是微信有意去做…

    2025年9月2日
    7
  • Mac OS 下三种修改Hosts文件的方法[通俗易懂]

    Mac OS 下三种修改Hosts文件的方法

    2022年2月11日
    54
  • 深度学习之softmax损失函数[通俗易懂]

    深度学习之softmax损失函数[通俗易懂]深度学习之softmax损失函数归一化向量的每个元素均大于0小于1,且和为1,所以可以将其看作归属各个类别的概率。损失函数可以看作真实类别的负对数概率,希望其越小。importnumpyasnpD=784K=10N=128#scores是分值矩阵,每行代表一个样本scores=np.random.randn(N,K)print(scores.shape)#样本标签y=np.random.randint(K,size=N)print(y.shape)#指数化分值矩

    2022年6月26日
    35
  • Navicat 15 激活补丁破解方法

    Navicat 15 激活补丁破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    132
  • 0324resumable_timeout library cache lock

    0324resumable_timeout library cache lock

    2021年9月13日
    94

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号