Android Convert Px to Dp (Video Aspect Ratio)

spentak picture spentak · Jul 11, 2011 · Viewed 57k times · Source

Possible Duplicate:
converting pixels to dp in android

I'm trying to convert pixels to dp. What is the formula?

Lets convert 640 and 480 into dp. The docs say this

The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160)

But I don't think that is what I need (and I don't know how to use this). I guess I just need the forumla. I have the code ready:

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;
    }

Answer

mportuesisf picture mportuesisf · Jul 11, 2011

Instead of trying to infer the dp conversion factor from the screen's density classification, you can simply query it directly:

getWindowManager().getDefaultDisplay().getMetrics(metrics);
float logicalDensity = metrics.density;

logicalDensity will then contain the factor you need to multiply dp by to get physical pixel dimensions for the device screen.

int px = (int) Math.ceil(dp * logicalDensity);