android dp转px的公式_dp与px的转换对照表

什么是dp 含义:density-independent pixel,叫dp或dip,与终端上的实际物理像素点无关。

单位:dp,可以保证在不同屏幕像素密度的设备上显示相同的效果

Android开发时用dp而不是px单位设置图片大小,是Android特有的单位

场景:假如同样都是画一条长度是屏幕一半的线,如果使用px作为计量单位,那么在480×800分辨率手机上设置应为240px;在320×480的手机上应设置为160px,二者设置就不同了;如果使用dp为单位,在这两种分辨率下,160dp都显示为屏幕一半的长度。

换算的基本公式

dp = (width in pixels * 160) / screen density

在Android中,规定以160dpi(即屏幕分辨率为320×480)为基准:1dp=1px密度类型代表的分辨率(px)屏幕密度(dpi)换算(px/dp)比例低密度(ldpi)240×3201201dp=0.75px3

中密度(mdpi)320×4801601dp=1px4

高密度(hdpi)480×8002401dp=1.5px6

超高密度(xhdpi)720×12803201dp=2px8

超超高密度(xxhdpi)1080×19204801dp=3px12

getResources().getDisplayMetrics().densityDpi 就是屏幕密度。

getResources().getDisplayMetrics().density 也可以理解为1dip相当于多少个px啦。

dp是虚拟像素,在不同的像素密度的设备上会自动适配,比如:

dpi 为160,  1dp = 1px

dpi是240,1dp = 1.5px

Java 计算代码public class ui {

public static void main(String[] args) {

// TODO Auto-generated method stub

double dp = getPixelsToDp(1920,480);

System.out.println("result:"+dp);

}

private static double getPixelsToDp(int pixels,int density){

return (pixels*160)/density;

}

}

分辨率 :320 * 480

宽的dp:widthDp = ( 320 * 160 ) / 160 = 320

高的dp:widthDp = ( 480 * 160 ) / 160 = 480

分辨率 :480 * 800

宽的dp:widthDp = ( 480 * 160 ) / 240 = 320

高的dp:widthDp = ( 800 * 160 ) / 240 = 533

分辨率 :720 * 1280

宽的dp:widthDp = ( 720 * 160 ) / 320 = 360

高的dp:widthDp = ( 1280 * 160 ) / 320 = 640

分辨率 :1080 * 1920

宽的dp:widthDp = ( 1080 * 160 ) / 480 = 360

高的dp:widthDp =( 1920 * 160 ) / 480 = 640

dp,px 互相转换

Android 的 kotlin dp,px 互相转换的代码object ScreenUtil {

/**

* 根据手机的分辨率从 dp 的单位 转成为 px(像素)

*/

fun dp2px(context: Context, dpValue: Float): Int {

val scale = context.resources.displayMetrics.density

return (dpValue * scale + 0.5f).toInt()

}

/**

* 根据手机的分辨率从 px(像素) 的单位 转成为 dp

*/

fun px2dp(context: Context, pxValue: Float): Int {

val scale = context.resources.displayMetrics.density

return (pxValue / scale + 0.5f).toInt()

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值