Android将Px转换为Dp(视频宽高比)

spe*_*tak 22 android aspect-ratio screen-resolution

可能重复:
在android中将像素转换为dp

我正在尝试将像素转换为dp.公式是什么?

让我们将640和480转换成dp.文档说这个

dp单位到屏幕像素的转换很简单:px = dp*(dpi/160)

但我认为这不是我需要的(我不知道如何使用它).我想我只需要论坛.我准备好了代码:

DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);

    switch(metrics.densityDpi)
    {
         case DisplayMetrics.DENSITY_LOW:
         int sixForty = ?
         int fourEighty = ?
         break;

         case DisplayMetrics.DENSITY_MEDIUM:
         int sixForty = ?
         int fourEighty = ?
         break;

         case DisplayMetrics.DENSITY_HIGH:
         int sixForty = ?
         int fourEighty = ?
         break;
    }
Run Code Online (Sandbox Code Playgroud)

mpo*_*isf 76

您可以直接查询它,而不是尝试从屏幕的密度分类中推断出dp转换因子:

getWindowManager().getDefaultDisplay().getMetrics(metrics);
float logicalDensity = metrics.density;
Run Code Online (Sandbox Code Playgroud)

然后,logicalDensity将包含将dp乘以得到设备屏幕的物理像素尺寸所需的因子.

int px = (int) Math.ceil(dp * logicalDensity);
Run Code Online (Sandbox Code Playgroud)

  • public int convertToDp(int input){//获取屏幕的密度标度最终浮点数= getResources().getDisplayMetrics().density; //根据密度标度返回(int)将输入dps转换为像素(输入*标度+ 0.5f); } (10认同)
  • 要从像素获取dp,请将密度除以像素值而不是乘以. (8认同)
  • 老问题,但为什么+ 0.5? (6认同)
  • 我会使用`int px =(int)Math.ceil(dp*logicalDensity);`然后.至少出于教育目的:-) (6认同)
  • 如有必要,+0.5向上舍入到最接近的整数.转换为整数时,十进制之后的所有内容都会被截断.+0.5确保返回最"正确"的整数. (4认同)