Informazioni sulle dimensioni di immagini e risorse Android


86

Ho bisogno di chiarire alcuni dubbi sulle risorse di immagini per la mia app,

se specifico in un file xml che l'altezza di qualcosa [visualizzazione immagine] è di 50 dip

quale tipo di schermo devo scegliere dalla cartella delle risorse?

drawable, hdpi, ldpi, mdpi, xhdpi,

per avere l'immagine con un'altezza di 50 px,

e qual è la percentuale per immagini di dimensioni più grandi e più piccole rispetto all'immagine di base,

come in iOS, @ 2x, è letteralmente 2 volte la dimensione dell'immagine e dici programmaticamente la dimensione normale,

Grazie!


1
La tua domanda è spiegata nel manuale di Android: developer.android.com/guide/practices/screens_support.html
Marcin Orlowski,

Risposte:


373

mdpiè la densità di riferimento, ovvero 1 px su un mdpidisplay è uguale a 1 dip. Il rapporto per il ridimensionamento degli asset è:

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

Anche se non devi davvero preoccuparti a tvdpimeno che tu non stia sviluppando specificamente per Google TV o per il Nexus 7 originale, ma anche Google consiglia di utilizzare semplicemente le hdpirisorse.

Ciò significa che se stai facendo un'immagine 48dip e prevedi di supportarne fino a xxhdpi resolution, dovresti iniziare con un'immagine 144px (192px se vuoi risorse native per xxxhdpi) e creare le seguenti immagini per le densità:

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

E questi dovrebbero mostrare più o meno le stesse dimensioni su qualsiasi dispositivo, a condizione che hai messo questi in cartelle densità-specifici (ad esempio drawable-xhdpi, drawable-hdpie così via)

Per riferimento, le densità dei pixel per questi sono:

ldpi  | mdpi  | tvdpi  | hdpi  | xhdpi  | xxhdpi  | xxxhdpi
120   | 160   | 213    | 240   | 320    | 480     | 640

32
Questa è la spiegazione più semplice di questo argomento che abbia visto online ovunque. L'ho letteralmente segnato sul posto di lavoro dei miei designer lol
James andresakis

10
Haha, fantastico! : P Ho appena aggiunto anche le informazioni per XXHDPI.
Kevin Coppock

Come decidi di dover partire da un 48dip? Supponi di avere a portata di mano solo un tablet (mdpi), inizi con una dimensione casuale e ripeti fino a quando non sembra "abbastanza grande"?
phtrivier

@phtrivier È solo una dimensione che ho usato come esempio. In questo caso, ha le dimensioni di un'icona di avvio. Qualunque sia la dimensione necessaria per altre risorse dipende dal tuo caso d'uso.
Kevin Coppock

1
Ho anche creato uno strumento per calcolarlo al volo: pixit-tool.web.app/#
wdavies973

22

Sulla base della risposta di kcoppock ho creato il seguente script di shell per ridimensionare automaticamente tutte le immagini alla dimensione corretta e copiarle nelle rispettive cartelle drawable- * - di Android!

Crea uno script di shell e incolla il codice seguente:

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/*

Metti il ​​tuo script in una cartella e le tue immagini originali in una sottocartella, ad esempio:

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

Esegui lo script della shell nel terminale: sh createAndroidImages.sh

Per copiare le immagini create direttamente nel tuo progetto Android Studio:

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

Hai finito! Spero che questo aiuti qualcuno!

PS Notare che le immagini originali dovrebbero avere almeno quattro volte la larghezza in pixel, rispetto alla larghezza desiderata in dpi (ad esempio 4 (fattore xxxhdpi) * 30dpi => 120px) per risultati ottimali.


4

kcoppock ha fatto un ottimo lavoro spiegando le densità dello schermo Andorid. Vorrei solo aggiungere un altro punto riguardo alla domanda originale.

L'icona di avvio del tablet Android utilizza un bucket di densità in su.

Secondo il post su Google+ dello sviluppatore di Google Nick Butcher

Lo splendido schermo del Nexus 10 rientra nel bucket di densità XHDPI. Sui tablet, Launcher utilizza le icone da un bucket di densità in su [0] per renderle leggermente più grandi. Per assicurarti che l'icona di avvio (probabilmente la risorsa più importante delle tue app) sia nitida, devi aggiungere un'icona 144 * 144px nella cartella drawable-xxhdpi o drawable-480dpi.

Trova la fonte qui


1

Ecco i miei calcoli per l'upscaling e il ridimensionamento delle immagini per Android-

ldpi (120 dpi, schermo a bassa densità) - 36 px x 36 px (0,19) (1)

mdpi (160 dpi, schermo a densità media) - 48 px x 48 px ( 0,25) (1,33)

hdpi (240 dpi, schermo ad alta densità) - 72px x 72px (0,38) (2)

xhdpi (320 dpi, schermo ad altissima densità) - 96px x 96px (0,5) (2,67)

xxhdpi (480 dpi, schermo ad altissima densità) - 144px x 144px (0,75) (4)

xxxhdpi (640 dpi, schermo ad altissima densità extra) - 192px x 192px (1.0) (5.33)

Il mio breve articolo è utile per creare risorse di immagini utilizzando imagemagick, quando ci sono più immagini.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.