Informationen zu Android-Bildern und Asset-Größen

86

Ich muss einige Zweifel an den Bildressourcen für meine App klären.

wenn ich in einer XML-Datei angibe, dass die Höhe von etwas [Bildansicht] 50 Dip-Höhe beträgt

Welchen Bildschirmtyp soll ich aus dem Ressourcenordner auswählen?

drawable, hdpi, ldpi, mdpi, xhdpi,

um das Bild mit einer Höhe von 50 px zu haben,

und wie hoch ist der Prozentsatz für größere, kleinere Bilder im Vergleich zum Basisbild?

Wie in iOS ist @ 2x buchstäblich 2-mal so groß wie das Bild, und Sie sagen programmatisch die normale Größe.

Vielen Dank!

manuelBetancurt
quelle
1
Ihre Frage wird im Android-Handbuch erklärt: developer.android.com/guide/practices/screens_support.html
Marcin Orlowski

Antworten:

373

mdpiist die Referenzdichte - das heißt, 1 px auf einem mdpiDisplay entspricht 1 Dip. Das Verhältnis für die Skalierung von Assets ist:

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

Sie müssen sich zwar keine Sorgen machen, es tvdpisei denn, Sie entwickeln speziell für Google TV oder das ursprüngliche Nexus 7 - aber selbst Google empfiehlt, einfach hdpiAssets zu verwenden.

Wenn Sie ein 48dip-Image erstellen und bis zu unterstützen xxhdpi resolutionmöchten, sollten Sie mit einem 144px-Image beginnen (192px, wenn Sie native Assets für xxxhdpi möchten) und die folgenden Images für die Dichten erstellen:

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

Und diese sollten auf jedem Gerät in etwa die gleiche Größe angezeigt werden , sofern Sie diese in der Dichte spezifische Ordner platziert haben (zB drawable-xhdpi, drawable-hdpiusw.)

Als Referenz sind die Pixeldichten für diese:

ldpi  | mdpi  | tvdpi  | hdpi  | xhdpi  | xxhdpi  | xxxhdpi
120   | 160   | 213    | 240   | 320    | 480     | 640
Kevin Coppock
quelle
32
Dies ist die einfachste Erklärung für dieses Thema, die ich jemals online gesehen habe. Ich habe es buchstäblich auf meinem Designer-Arbeitsplatz markiert lol
James andresakis
10
Haha toll! : P Ich habe gerade auch Informationen für XXHDPI hinzugefügt.
Kevin Coppock
Wie entscheiden Sie, dass Sie von einem 48dip ausgehen müssen? Angenommen, Sie haben nur ein Tablet (mdpi) zur Hand. Beginnen Sie mit einer zufälligen Größe und iterieren Sie, bis es "groß genug" aussieht.
Phtrivier
@phtrivier Es ist nur eine Größe, die ich als Beispiel verwendet habe. In diesem Fall hat es die Größe eines Startsymbols. Welche Größe Sie für andere Assets benötigen, hängt von Ihrem Anwendungsfall ab.
Kevin Coppock
1
Ich habe auch ein Tool erstellt, um dies im laufenden
Betrieb
22

Basierend auf der Antwort von kcoppock habe ich das folgende Shell-Skript erstellt, um die Größe aller Bilder automatisch auf die richtige Größe zu ändern und sie in die entsprechenden Android-Zeichnungs- * - Ordner zu kopieren!

Erstellen Sie ein Shell-Skript und fügen Sie den folgenden Code ein:

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

Legen Sie Ihr Skript in einem Ordner und Ihre Originalbilder in einem Unterordner ab, z.

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

Führen Sie das Shell-Skript im Terminal aus: sh createAndroidImages.sh

So kopieren Sie die erstellten Bilder direkt in Ihr Android Studio-Projekt:

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

Du bist fertig! Hoffe das hilft jemandem!

PS Bitte beachten Sie, dass die Originalbilder mindestens die vierfache Breite in Pixel haben sollten als die gewünschte Breite in dpi (z. B. 4 (Faktor xxxhdpi) * 30dpi => 120px), um optimale Ergebnisse zu erzielen.

Electronix384128
quelle
4

kcoppock hat großartige Arbeit geleistet, um die Bildschirmdichten der Andoriden zu erklären. Ich möchte nur noch einen Punkt zur ursprünglichen Frage hinzufügen.

Das Android Tablet Launcher-Symbol verwendet einen Dichte-Bucket.

Laut dem Google+ Beitrag von Googles Entwickler Nick Butcher

Der wunderschöne Bildschirm des Nexus 10 fällt in den XHDPI-Dichtebereich. Auf Tablets verwendet Launcher Symbole ab einem Dichtebereich [0], um sie etwas größer zu machen. Um sicherzustellen, dass Ihr Startsymbol (wohl das wichtigste Element Ihrer Apps) klar ist, müssen Sie im Ordner drawable-xxhdpi oder drawable-480dpi ein 144 * 144px-Symbol hinzufügen.

Quelle hier finden

geng
quelle
1

Hier sind meine Berechnungen zum Hochskalieren und Verkleinern von Bildern für Android-

ldpi (120 dpi, Bildschirm mit niedriger Dichte) - 36 x 36 x (0,19) (1)

mdpi (160 dpi, Bildschirm mittlerer Dichte) - 48 x 48 x (0,25) (1,33)

HDPI (240 dpi, Bildschirm mit hoher Dichte) - 72 x 72 Pixel (0,38) (2)

xhdpi (320 dpi, Bildschirm mit besonders hoher Dichte) - 96 x 96 x (0,5) (2,67)

xxhdpi (480 dpi, Bildschirm mit besonders hoher Dichte) - 144 x 144 Pixel (0,75) (4)

xxxhdpi (640 dpi, Bildschirm mit extra-extra-extra-hoher Dichte) - 192px x 192px (1,0) (5,33)

Mein kurzer Artikel ist hilfreich, um Bildressourcen mit imagemagick zu erstellen, wenn mehrere Bilder vorhanden sind.

Sahu V Kumar
quelle