Android: 'dp' a 'px' conversión?

Estoy leyendo este artículo: http://developer.android.com/guide/practices/screens_support.html

Dice que la fórmula que utiliza Android para convertir entre una unidad dp a una unidad px es la siguiente:

px = dp * (dpi / 160) 

El artículo también da un ejemplo cuando el dpi es 240, lo que nos da px = 1.5 (estoy calculando para un solo píxel dp)

Sin embargo, ¿qué significa exactamente 1.5 aquí? Una vez que las unidades px son realmente los píxeles del dispositivo físico, Android dibujará 1 o 2 píxeles?

Depende del contexto.

Si se utiliza el valor dp en un contexto que implica tamaño, como el atributo android:layout_width , se android:layout_width la lógica descrita para Resources.getDimensionPixelSize () . Es decir, el valor de px se redondeará al valor entero más próximo, con el caso especial que si px > 0, entonces el valor real será al menos 1.

Si se utiliza el valor dp en un contexto que implique desplazamiento, como el atributo android:insetLeft del Inset Drawable, se utilizará la lógica descrita para Resources.getDimensionPixelOffset () . Es decir, el valor px simplemente se trunca a un valor entero.

A veces se utiliza el valor de punto flotante no modificado, como para el atributo android:dashWidth de la etiqueta <stroke/> en una forma Drawable, pero esto es bastante raro. Normalmente se utiliza el tamaño o la lógica de desplazamiento, incluso si se puede usar el valor de punto flotante.

Si lo que he leído es correcto, 1.5px significa que el único píxel '1' es un color especificado y el .5 de un píxel que lo rodea será una mezcla con el píxel '1' y un píxel junto a él.

P.ej

| A | AB | B |

A es 1,5px y B es 1,5x, por lo tanto, el píxel en el medio es una mezcla de ambos.

Así que con eso, dos píxeles uno junto al otro se mezclarán, por ejemplo, con una pantalla de 1px

| X | Y |

Ahora con una pantalla 1.5px:

| XY | YX | Se convierte en mezcla de ambos! Pero el conjunto de píxeles como X será más X que el conjunto de píxeles como Y

Px es un píxel. Píxeles independientes de la escala (sp) y píxeles independientes de la densidad (dip) que desea utilizar sp para los tamaños de fuente y la inmersión para todo lo demás.

Dip == dp

Desde aquí http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

 px Pixels - corresponds to actual pixels on the screen. in Inches - based on the physical size of the screen. mm Millimeters - based on the physical size of the screen. pt Points - 1/72 of an inch based on the physical size of the screen. dp Density-independent Pixels - an abstract unit that is based on the physical density of the screen. These units are relative to a 160 dpi screen, so one dp is one pixel on a 160 dpi screen. The ratio of dp-to-pixel will change with the screen density, but not necessarily in direct proportion. Note: The compiler accepts both "dip" and "dp", though "dp" is more consistent with "sp". sp Scale-independent Pixels - this is like the dp unit, but it is also scaled by the user's font size preference. It is recommend you use this unit when specifying font sizes, so they will be adjusted for both the screen density and user's preference. 

Creo que sería la mejor solución porque es un método estándar:

Int valueInPx = (int) TypedValue.applyDimension (TypedValue.COMPLEX_UNIT_PX, valueInDp, getResources (). GetDisplayMetrics ());

  • Actualizar la interfaz de usuario desde el subproceso
  • Android, cómo desenfocar / vidrio / helada actividad actual
  • ¿Cómo agregar la fila que está teniendo la columna múltiple dinámicamente en androide?
  • Cuadro de diálogo GUI de reconocimiento de voz personalizado de Android
  • ¿Cómo puedo hacer que un botón responda mejor?
  • ¿Cómo puedo obtener una función de paginación en vista de desplazamiento horizontal sin ViewPager?
  • Separador / Divisor de Android Lollipop Secciones
  • Trigger.io y teclados personalizados
  • Android Studio 0.2.8 TODO los colores han cambiado
  • Ayuda de la interfaz de usuario para la notificación en el icono
  • ¿Cómo mostrar la imagen GIF animado en la aplicación Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.