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:
- Android cómo hacer que ImageView con un minWidth tiene un borde?
- ArrayAdapter está repitiendo el encabezado de interfaz de usuario para cada elemento de ListView
- Margen de los botones en disposición lineal
- Cómo ocultar el botón en la barra de acciones
- Flujo textview alrededor de la imagen
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?
- Elementos de la interfaz de usuario de iOS que portaban en Android
- La elección de un motor de juego 2D para un juego de aventura simple estilo Zelda
- La inicialización de Android TextToSpeech bloquea / congela el subproceso de UI
- El teclado no se muestra cuando se inicia la actividad
- Sistema Android Trace
- ¿Cómo usar getResource.getIdentifier () para obtener Layout?
- Color de fondo del texto de Android TextView
- ¿Cómo usar el backport de fragmentos?
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 ());
- ¿Cómo conectar una impresora de red a través de Android?
- La ejecución del complemento no está cubierta por el error de configuración del ciclo de vida