Acerca de los tamaños de recursos e imágenes de Android

86

Necesito aclarar algunas dudas sobre los activos de imagen de mi aplicación,

si especifico en un archivo xml que la altura de algo [vista de imagen] es 50 altura de inmersión

¿Qué tipo de pantalla debo elegir de la carpeta de recursos?

drawable, hdpi, ldpi, mdpi, xhdpi,

tener la imagen de 50 px de altura,

y cuál es el porcentaje para imágenes más grandes y de menor tamaño en comparación con la imagen base,

como en iOS, @ 2x, es literalmente 2 veces el tamaño de la imagen, y dices programáticamente el tamaño normal,

¡Gracias!

manuelBetancurt
fuente
1
Su pregunta se explica en el manual de Android: developer.android.com/guide/practices/screens_support.html
Marcin Orlowski

Respuestas:

373

mdpies la densidad de referencia, es decir, 1 px en una mdpipantalla es igual a 1 inmersión. La proporción de escalado de activos es:

ldpi | mdpi | tvdpi | hdpi | xhdpi | xxhdpi | xxxhdpi
0.75 | 1    | 1.33  | 1.5  | 2     | 3      | 4

Aunque realmente no necesita preocuparse, a tvdpimenos que esté desarrollando específicamente para Google TV o el Nexus 7 original, incluso Google recomienda simplemente usar hdpiactivos.

Lo que esto significa es que si está haciendo una imagen de 48 dip y planea admitir hasta xxhdpi resolution, debe comenzar con una imagen de 144px (192px si desea activos nativos para xxxhdpi) y hacer las siguientes imágenes para las densidades:

ldpi    | mdpi    | tvdpi    | hdpi    | xhdpi     | xxhdpi    | xxxhdpi
36 x 36 | 48 x 48 | 64 x 64  | 72 x 72 | 96 x 96   | 144 x 144 | 192 x 192

Y estos deben mostrar al menos del mismo tamaño en cualquier dispositivo, a condición de que haya colocado estos en carpetas específicas de densidad (por ejemplo drawable-xhdpi, drawable-hdpi, etc.)

Como referencia, las densidades de píxeles para estos son:

ldpi  | mdpi  | tvdpi  | hdpi  | xhdpi  | xxhdpi  | xxxhdpi
120   | 160   | 213    | 240   | 320    | 480     | 640
Kevin Coppock
fuente
32
Esta es la explicación más sencilla de este tema que he visto en línea. Literalmente lo
marqué como un
10
¡Jaja, genial! : P También se acaba de agregar información para XXHDPI.
Kevin Coppock
¿Cómo decides que tienes que empezar con una inmersión de 48? Supongamos que solo tiene una tableta (mdpi) a mano, ¿comienza con un tamaño aleatorio e itera hasta que parece "lo suficientemente grande"?
phtrivier
@phtrivier Es solo un tamaño que usé como ejemplo. En este caso, es del tamaño de un icono de lanzador. El tamaño que necesite para otros activos depende de su caso de uso.
Kevin Coppock
1
También hice una herramienta para calcular esto sobre la marcha: pixit-tool.web.app/#
wdavies973
22

Basado en la respuesta de kcoppock , he creado el siguiente script de shell para cambiar automáticamente el tamaño de todas las imágenes al tamaño correcto y copiarlas en las respectivas carpetas de Android dibujables *.

Cree un script de shell y pegue el siguiente código:

createAndroidImages.sh

#!/bin/bash

read -p "Please enter the subfolder of the original images? " folder
read -p "How many DP (width) should the image have? " dp

for i in $(find $folder/. -type f -name "*[A-Z]*"); do mv "$i" "$(echo $i | tr A-Z a-z)"; done

mkdir drawable-ldpi
mkdir drawable-mdpi
mkdir drawable-tvdpi
mkdir drawable-hdpi
mkdir drawable-xhdpi
mkdir drawable-xxhdpi
mkdir drawable-xxxhdpi

cp $folder/* drawable-ldpi/
cp $folder/* drawable-mdpi/
cp $folder/* drawable-tvdpi/
cp $folder/* drawable-hdpi/
cp $folder/* drawable-xhdpi/
cp $folder/* drawable-xxhdpi/
cp $folder/* drawable-xxxhdpi/

sips -Z $(echo $dp*3/4 | bc) drawable-ldpi/*
sips -Z $(echo $dp | bc) drawable-mdpi/*
sips -Z $(echo $dp*4/3 | bc) drawable-tvdpi/*
sips -Z $(echo $dp*3/2 | bc) drawable-hdpi/*
sips -Z $(echo $dp*2 | bc) drawable-xhdpi/*
sips -Z $(echo $dp*3 | bc) drawable-xxhdpi/*
sips -Z $(echo $dp*4 | bc) drawable-xxxhdpi/*

Coloque su script en una carpeta y sus imágenes originales en una subcarpeta, por ejemplo:

/
.. createAndroidImages.sh
.. originalImages/
....a123.png
....b456.png

Ejecute el script de shell en la terminal: sh createAndroidImages.sh

Para copiar las imágenes creadas directamente a su proyecto de Android Studio:

cp -R drawable-* ~/AndroidStudioProjects/ESCRating/app/src/main/res/

¡Listo! ¡Espero que esto ayude a alguien!

PD Tenga en cuenta que las imágenes originales deben tener al menos cuatro veces el ancho en píxeles, que el ancho deseado en ppp (por ejemplo, 4 (factor xxxhdpi) * 30 ppp => 120px) para obtener resultados óptimos.

electronix384128
fuente
4

kcoppock hizo un gran trabajo explicando las densidades de pantalla de Andorid. Solo me gustaría agregar un punto más con respecto a la pregunta original.

El icono del iniciador de la tableta Android usa un cubo de densidad hacia arriba.

Según la publicación de Google+ del desarrollador de Google Nick Butcher

La hermosa pantalla del Nexus 10 entra en el grupo de densidad XHDPI. En tabletas, Launcher usa íconos desde un depósito de densidad hasta [0] para hacerlos un poco más grandes. Para asegurarse de que el icono de su lanzador (posiblemente el activo más importante de sus aplicaciones) sea nítido, debe agregar un icono de 144 * 144px en la carpeta drawable-xxhdpi o drawable-480dpi.

Encuentra la fuente aquí

geng
fuente
1

Aquí están mis cálculos para aumentar y reducir la escala de imágenes para Android:

ldpi (120 ppp, pantalla de baja densidad) - 36px x 36px (0.19) (1)

mdpi (160 ppp, pantalla de densidad media) - 48px x 48px (0,25) (1,33)

hdpi (240 ppp, pantalla de alta densidad): 72 px x 72 px (0.38) (2)

xhdpi (320 ppp, pantalla de densidad extra alta) - 96px x 96px (0.5) (2.67)

xxhdpi (480 dpi, pantalla de densidad extra extra alta) - 144 px x 144 px (0,75) (4)

xxxhdpi (640 ppp, pantalla de densidad extra extra extra alta) - 192 px x 192 px (1.0) (5.33)

Mi breve artículo es útil para crear recursos de imágenes usando imagemagick, cuando hay varias imágenes.

Sahu V Kumar
fuente