dp与px转换

news/2024/11/7 16:44:23/
关于px与dp的一些资料:
dp px 的关系:

  • QVGA:  density=0.75 densityDpi=120 QVGA240*320
    HVGAdensity=1.0 densityDpi=160 HVGA320*480
    VGAdensity=1.0 densityDpi=160 VGA480*640
    WVGA:density = 1.5 densityDpi=240 WVGA(480*800)
    WQVGAdensity=2.0 densityDpi=120 WQVGA240*400
    densityDip值表示每英寸有多少个显示点
而当 densityDip=160时,1dp=1px。

现在大家通用的算法:

public static int dip2px(Context context,float dipValue){
     final float scale=context.getResouses().getDisplayMetrics().density;
     return (int)(dipValue*scale+0.5f);
}

public static int px2dp(Context context,float pxValue){
    final float scale = context.getResource.getDisplayMetrics().density; 
    return (int)(pxValue/scale+0.5f); 
}

然而根据上面的资料可以得到这样的公式:
px = dp*densityDpi/160
        
dp  = px*160/densityDpi

用代码体现就是:
public static int dip2px(Context context,float dipValue){
    final float scale=context.getResouses().getDisplayMetrics().densityDip;
    return (int)(dipValue*(scale/160));
}

public static int px2dp(Context context,float pxValue){
    final float scale = context.getResource.getDisplayMetrics().densityDip;
    return (int)((pxValue*160)/scale);
}

然而当
1dp,densityDpi=120时,用上面那个转换方法得到的会是0px,然而如果要用小华华给的方法会是1px。
1px ,densityDpi=240时,用上面那个转换方法得到的也是0dp,用小华华给的方法仍然会为1dp。
所以上面的方法该修改,当小数位不小于0.5的时候进位。所以上面方法修改为:
public static int dip2px(Context context,float dipValue){
    final float scale=context.getResouses().getDisplayMetrics().densityDip;
    return (int)(dipValue*(scale/160)+0.5f);
}

public static int px2dp(Context context,float pxValue){
    final float scale = context.getResource.getDisplayMetrics().densityDip;
    return (int)((pxValue*160)/scale+0.5f);
}

两种方法都能达到同样的效果。。但是我感觉第二种方法更容易理解。。

http://www.ppmy.cn/news/479249.html

相关文章

CS5262: DP转HDMI+VGA

CS5262是一款带嵌入式MCU的4通道DisplayPort1.4到HDMI2.0/VGA转换器芯片,设计用于将DP1.4信号源连接到HDMI2.0接收器。CS5262集成了DP1.4兼容接收机和HDMI2.0兼容接收机发射机和VGA输出接口。CS5262的DP接口包括4条主通道、辅助通道和HPD信号。接收器支持每通道最大…

CapstoneCS5202替代RTD2166|DP转VGA转换电路|设计DP转VGA转接方案

CapstoneCS5202适用于设计DP转VGA转换电路,主要用在嵌入式单片机基于工业机或者INTEL X86主板上面,也适用于多个电子配件市场和显示器应用程序,如笔记本电脑、主板、台式机、适配器、转换器和转接器。 CS5202应用方式: CapstoneC…

C++基础(3)——类和对象(1)

前言 本文主要介绍了C中类和对象的基本知识 4.1.1:封装 写一个Circle类,然后分别在栈上和堆上创建两个圆对象,对象包含属性和行为,调用求周长的成员函数,并打印出结果。 4.1.2:封装-访问权限 public成员…

力扣算法刷题Day36|贪心:无重叠区间 划分字母区间 合并区间

力扣题目:#435. 无重叠区间 刷题时长:参考答案后5min 解题方法:排序 复杂度分析 时间O(nlogn)空间O(1) 问题总结 判断出重叠空间后无需从数组中移除,可通过更新右边界为重叠两区间右边界的最小值,用以和后续区间…

感谢ChatGPT,救了我狗的命!

前一段时间,国外一位小哥哥在推特上发布了一条消息,声称GPT-4拯救了自家狗狗的性命。 这是怎么一回事呢? 这个小哥哥养了一只两岁的边境牧羊犬,这只牧羊犬被诊断出患有蜱传疾病,这属于一种细菌性传染病。 虽然小哥哥一…

2021-2027全球及中国表面轮廓仪行业研究及十四五规划分析报告

【报告篇幅】:149 【报告图表数】:200 【报告出版时间】:2021年1月 报告摘要 本报告研究“十三五”期间全球及中国市场表面轮廓仪的供给和需求情况,以及“十四五”期间行业发展预测。重点分析全球主要地区表面轮廓仪的的产能、…

软件测试sd卡真伪,亲测,拼多多上买的SD卡到底是不是正品

原标题:亲测,拼多多上买的SD卡到底是不是正品 前一阵让二手回收了一直用的尼康D750,换了索尼a6400,尼康D750用的双64G SD卡都是U1的,读写速度都不够快,恰好看到拼多多上的SanDisk的优惠信息,San…

2021年汽车激光雷达行业研究报告

1. 汽车行业价值重心后移,自动驾驶发展感知先行 ​ “新制造新服务”推进汽车行业价值重心后移。当前汽车行业已于百年变革 节点起步,制造技术变革叠加 5G 逐步应用,助力行业由电动化开始迈入智能化、 网联化新时代。谷歌、华为、百度等新型…