Pregunta Conversión de píxeles a dp


He creado mi aplicación con el alto y ancho dados en píxeles para un dispositivo Pantech cuya resolución es 480x800.

Necesito convertir la altura y el ancho para un dispositivo G1. Pensé que convertirlo en dp resolvería el problema y proporcionaría la misma solución para ambos dispositivos.

¿Hay alguna manera fácil de convertir píxeles a dp? ¿Alguna sugerencia?


666
2018-01-05 15:04


origen


Respuestas:


/// Converts 14 dip into its equivalent px

Resources r = getResources();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 14, r.getDisplayMetrics());

897
2018-06-13 05:56



/**
 * This method converts dp unit to equivalent pixels, depending on device density. 
 * 
 * @param dp A value in dp (density independent pixels) unit. Which we need to convert into pixels
 * @param context Context to get resources and device specific display metrics
 * @return A float value to represent px equivalent to dp depending on device density
 */
public static float convertDpToPixel(float dp, Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float px = dp * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
    return px;
}

/**
 * This method converts device specific pixels to density independent pixels.
 * 
 * @param px A value in px (pixels) unit. Which we need to convert into db
 * @param context Context to get resources and device specific display metrics
 * @return A float value to represent dp equivalent to px value
 */
public static float convertPixelsToDp(float px, Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float dp = px / ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
    return dp;
}

723
2018-03-05 08:09



Preferiblemente poner en una clase Util.java

public static float dpFromPx(final Context context, final float px) {
    return px / context.getResources().getDisplayMetrics().density;
}

public static float pxFromDp(final Context context, final float dp) {
    return dp * context.getResources().getDisplayMetrics().density;
}

261
2017-08-27 18:34



float density = context.getResources().getDisplayMetrics().density;
float px = someDpValue * density;
float dp = somePxValue / density;

density igual

  • .75 en ldpi (120 ppp)
  • 1.0 en mdpi (160 dpi; base)
  • 1.5 en hdpi (240 ppp)
  • 2.0 en xhdpi (320 ppp)
  • 3.0 en xxhdpi (480 ppp)
  • 4.0 en xxxhdpi (640 ppp)

Utilizar esta convertidor en línea jugar con valores de dpi

EDITAR: Parece que no hay una relación 1: 1 entre dpi cubo y density. Parece que el Nexus 5X siendo xxhdpi tiene un density valor de 2.625 (en lugar de 3) Véalo usted mismo en el Métricas del dispositivo.


171
2018-02-14 09:56



De acuerdo con la Guía de desarrollo de Android:

px = dp * (dpi / 160)

Pero a menudo querrás hacer esto al revés cuando recibas un diseño expresado en píxeles. Asi que:

dp = px / (dpi / 160)

Si está en un dispositivo de 240 ppp, esta relación es 1.5 (como se indicó anteriormente), por lo que significa que un icono de 60 píxeles equivale a 40 pb en la aplicación.


81
2017-12-05 19:00



¡Si puede usar las dimensiones XML, es muy simple!

En tus res/values/dimens.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="thumbnail_height">120dp</dimen>
    ...
    ...
</resources>

Luego en tu Java:

getResources().getDimensionPixelSize(R.dimen.thumbnail_height);

76
2017-10-16 01:39



Sin Context, métodos estáticos elegantes:

public static int dpToPx(int dp)
{
    return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}

public static int pxToDp(int px)
{
    return (int) (px / Resources.getSystem().getDisplayMetrics().density);
}

62
2017-07-26 11:20



Puedes usar esto ... sin contexto

public static int pxToDp(int px) {
    return (int) (px / Resources.getSystem().getDisplayMetrics().density);
}

public static int dpToPx(int dp) {
    return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}

59
2017-08-09 03:42



por DP to Pixel

Crea un valor en dimens.xml

<dimen name="textSize">20dp</dimen>

Obtener ese valor en pixel como:

int sizeInPixel = context.getResources().getDimensionPixelSize(R.dimen.textSize);

38
2017-12-11 10:22