Informacje o obrazach i rozmiarach zasobów Androida

86

Muszę wyjaśnić pewne wątpliwości dotyczące zasobów graficznych dla mojej aplikacji,

jeśli określę w pliku xml, że wysokość czegoś [widok obrazu] wynosi 50 zanurzeń

jaki typ ekranu wybrać z folderu zasobów?

drawable, hdpi, ldpi, mdpi, xhdpi,

mieć obraz o wysokości 50 pikseli,

i jaki jest procent większych i mniejszych obrazów w porównaniu z obrazem podstawowym,

podobnie jak w iOS, @ 2x, jest dosłownie 2 razy większe od rozmiaru obrazu, a programowo mówisz, że rozmiar normalny

dzięki!

manuelBetancurt
źródło
1
Twoje pytanie jest wyjaśnione w podręczniku Androida: developer.android.com/guide/practices/screens_support.html
Marcin Orlowski.

Odpowiedzi:

373

mdpito gęstość odniesienia - to znaczy, że 1 piksel na mdpiwyświetlaczu to 1 spadek. Współczynnik skalowania aktywów wynosi:

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

Chociaż tak naprawdę nie musisz się martwić, tvdpichyba że tworzysz specjalnie dla Google TV lub oryginalnego Nexusa 7 - ale nawet Google zaleca po prostu korzystanie z hdpizasobów.

Oznacza to, że jeśli robisz obraz 48dip i planujesz obsługiwać do xxhdpi resolution, powinieneś zacząć od obrazu 144px (192px, jeśli chcesz mieć zasoby natywne dla xxxhdpi) i wykonać następujące obrazy dla gęstości:

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

I powinny one wyświetlane w mniej więcej tej samej wielkości na dowolnym urządzeniu, pod warunkiem, że umieściliśmy je w gęstości specyficznych folderach (np drawable-xhdpi, drawable-hdpiitp)

Dla porównania, gęstości pikseli dla nich to:

ldpi  | mdpi  | tvdpi  | hdpi  | xhdpi  | xxhdpi  | xxxhdpi
120   | 160   | 213    | 240   | 320    | 480     | 640
Kevin Coppock
źródło
32
To najłatwiejsze wyjaśnienie tego tematu, jakie widziałem w Internecie. Dosłownie książka oznaczyłem to na mojej stacji
roboczej
10
Haha, świetnie! : P Właśnie dodałem też informacje dla XXHDPI.
Kevin Coppock
Jak decydujesz, że musisz zacząć od 48dipów? Powiedzmy, że masz pod ręką tylko tablet (mdpi), czy zaczynasz od losowego rozmiaru i iterujesz, aż będzie wyglądał na „wystarczająco duży”?
phtrivier
@phtrivier To tylko rozmiar, którego użyłem jako przykładu. W tym przypadku jest to rozmiar ikony programu uruchamiającego. To, jakiego rozmiaru potrzebujesz dla innych zasobów, zależy od twojego przypadku użycia.
Kevin Coppock
1
Stworzyłem również narzędzie do obliczania tego w locie: pixit-tool.web.app/#
wdavies973
22

W oparciu o odpowiedź kcoppocka stworzyłem następujący skrypt powłoki, aby automatycznie zmienić rozmiar wszystkich obrazów do odpowiedniego rozmiaru i skopiować je do odpowiednich folderów do rysowania - * - Androida!

Utwórz skrypt powłoki i wklej następujący kod:

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

Umieść skrypt w folderze, a oryginalne obrazy w podfolderze, np .:

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

Uruchom skrypt powłoki w terminalu: sh createAndroidImages.sh

Aby skopiować utworzone obrazy bezpośrednio do projektu Android Studio:

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

Jesteś skończony! Mam nadzieję, że to komuś pomoże!

PS Należy pamiętać, że oryginalne obrazy powinny mieć co najmniej czterokrotnie większą szerokość w pikselach niż żądana szerokość w dpi (np. 4 (współczynnik xxxhdpi) * 30dpi => 120px), aby uzyskać optymalne wyniki.

electronix384128
źródło
4

kcoppock wykonał świetną robotę, wyjaśniając gęstość ekranu w Andorid. Chciałbym tylko dodać jeszcze jedną kwestię dotyczącą pierwotnego pytania.

Ikona uruchamiania tabletu z systemem Android używa jednego segmentu gęstości w górę.

Według posta Google+ programisty Google Nicka Butchera

Wspaniały ekran Nexusa 10 mieści się w kubełku gęstości XHDPI. Na tabletach Launcher używa ikon z jednego segmentu gęstości w górę [0], aby je nieco powiększyć. Aby upewnić się, że ikona programu uruchamiającego (prawdopodobnie najważniejszy zasób aplikacji) jest wyraźna, musisz dodać ikonę 144 * 144px w folderze drawable-xxhdpi lub drawable-480dpi.

Znajdź źródło tutaj

geng
źródło
1

Oto moje obliczenia dotyczące skalowania w górę i w dół obrazów dla Androida:

ldpi (120 dpi, ekran o niskiej gęstości) - 36px x 36px (0,19) (1)

mdpi (160 dpi, ekran o średniej gęstości) - 48 pikseli x 48 pikseli (0,25) (1,33)

hdpi (240 dpi, ekran o wysokiej gęstości) - 72px x 72px (0,38) (2)

xhdpi (320 dpi, bardzo wysoka gęstość ekranu) - 96px x 96px (0,5) (2,67)

xxhdpi (480 dpi, ekran o bardzo dużej gęstości) - 144px x 144px (0,75) (4)

xxxhdpi (640 dpi, ekran o bardzo dużej gęstości) - 192 piksele x 192 piksele (1,0) (5,33)

Mój krótki artykuł jest pomocny przy tworzeniu zasobów graficznych za pomocą imagemagick, gdy jest wiele obrazów.

Sahu V Kumar
źródło