Zrzeczenie się
Ta odpowiedź pochodzi z 2013 roku i jest bardzo nieaktualna. W systemie Android 3.2 istnieje teraz 6 grup gęstości ekranu. Ta odpowiedź zostanie zaktualizowana, gdy tylko będę mogła, ale bez ETA. Informacje na temat wszystkich gęstości w tej chwili znajdują się w oficjalnej dokumentacji (chociaż jak zwykle trudno jest znaleźć informacje o określonych rozmiarach pikseli).
Oto wersja tl / dr
Utwórz 4 obrazy, po jednym dla każdej gęstości ekranu:
- xlarge (xhdpi): 640x960
- duży (hdpi): 480 x 800
- średni (mdpi): 320 x 480
- mały (ldpi): 240 x 320
Przeczytaj wprowadzenie do obrazu 9-patch w Android Developer Guide
- Projektuj obrazy z obszarami, które można bezpiecznie rozciągnąć bez uszczerbku dla efektu końcowego
Dzięki temu Android wybierze odpowiedni plik dla gęstości obrazu urządzenia, a następnie rozciągnie obraz zgodnie ze standardem 9 łatek.
koniec tl; dr. Pełny post z wyprzedzeniem
Odpowiadam w odniesieniu do aspektu projektowego pytania. Nie jestem programistą, więc nie będę w stanie dostarczyć kodu do implementacji wielu dostarczonych rozwiązań. Niestety, moim zamiarem jest pomoc projektantom, którzy są tak samo zagubieni, jak ja, kiedy pomogłem opracować moją pierwszą aplikację na Androida.
Pasuje do wszystkich rozmiarów
Dzięki systemowi Android firmy mogą opracowywać telefony komórkowe i stoły o niemal dowolnej wielkości, z niemal dowolną rozdzielczością. Z tego powodu nie ma „odpowiedniego rozmiaru obrazu” dla ekranu powitalnego, ponieważ nie ma ustalonych rozdzielczości ekranu. Stanowi to problem dla osób, które chcą wdrożyć ekran powitalny.
Czy Twoi użytkownicy naprawdę chcą zobaczyć ekran powitalny?
(Na marginesie, ekrany powitalne są nieco zniechęcone wśród facetów zajmujących się użytecznością. Twierdzi się, że użytkownik już wie, którą aplikację nacisnął, a znakowanie obrazu za pomocą ekranu powitalnego nie jest konieczne, ponieważ zakłóca to tylko wrażenia użytkownika z „reklama”. Powinna być jednak używana w aplikacjach, które wymagają pewnego ładowania podczas inicjalizacji (5s +), w tym w grach itp., aby użytkownik nie utknął, zastanawiając się, czy aplikacja uległa awarii, czy nie.
Gęstość ekranu; 4 klasy
Biorąc pod uwagę tak wiele różnych rozdzielczości ekranu w telefonach na rynku, Google wdrożyło kilka alternatyw i sprytnych rozwiązań, które mogą pomóc. Pierwszą rzeczą, którą musisz wiedzieć, jest to, że Android dzieli WSZYSTKIE ekrany na 4 różne gęstości ekranu:
- Niska gęstość (ldpi ~ 120dpi)
- Średnia gęstość (mdpi ~ 160dpi)
- Wysoka gęstość (hdpi ~ 240dpi)
- Extra-High Density (xhdpi ~ 320dpi) (Te wartości dpi są przybliżone, ponieważ niestandardowe urządzenia będą miały różne wartości dpi)
To, co musisz wiedzieć (jeśli jesteś projektantem), to fakt, że Android zasadniczo wybiera spośród 4 obrazów do wyświetlenia, w zależności od urządzenia. Musisz w zasadzie zaprojektować 4 różne obrazy (chociaż można opracować więcej dla różnych formatów, takich jak tryb panoramiczny, tryb portretowy / krajobrazowy itp.).
Mając to na uwadze, wiedz o tym: chyba że zaprojektujesz ekran dla każdej rozdzielczości używanej w Androidzie, obraz zostanie rozciągnięty do rozmiaru ekranu. I chyba, że twój obraz jest w zasadzie gradientem lub rozmyciem, otrzymasz niepożądane zniekształcenie podczas rozciągania. Masz więc zasadniczo dwie opcje: utwórz obraz dla każdej kombinacji rozmiaru / gęstości ekranu lub utwórz cztery obrazy z 9 łatkami.
Najtrudniejszym rozwiązaniem jest zaprojektowanie innego ekranu powitalnego dla każdej rozdzielczości. Możesz zacząć od wykonania rozdzielczości w tabeli na końcu tej strony (jest ich więcej. Przykład: 960 x 720 nie jest tam wymieniony). Zakładając, że masz na obrazie małe szczegóły, takie jak mały tekst, musisz zaprojektować więcej niż jeden ekran dla każdej rozdzielczości. Na przykład obraz 480 x 800 wyświetlany na średnim ekranie może wyglądać dobrze, ale na mniejszym ekranie (o wyższej gęstości / dpi) logo może stać się zbyt małe lub niektóre teksty mogą być nieczytelne.
Obraz 9 łatek
Drugim rozwiązaniem jest utworzenie obrazu z 9 łatami . Zasadniczo jest to 1-pikselowa przezroczysta ramka wokół obrazu, a rysując czarne piksele w górnym i lewym obszarze tej ramki, możesz określić, które części obrazu będą mogły się rozciągać. Nie będę wchodził w szczegóły działania 9-płatkowych obrazów, ale w skrócie piksele, które wyrównują się do oznaczeń w górnym i lewym obszarze, to piksele, które zostaną powtórzone w celu rozciągnięcia obrazu.
Kilka podstawowych zasad
- Możesz tworzyć te obrazy w Photoshopie (lub dowolnym oprogramowaniu do edycji obrazów, które może precyzyjnie tworzyć przezroczyste pliki PNG).
- 1-pikselowa ramka musi być PEŁNA PRZEJRZYSTA.
- Przezroczysta 1-pikselowa ramka musi znajdować się wokół obrazu, a nie tylko u góry i po lewej stronie.
- w tym obszarze możesz rysować tylko czarne (# 000000) pikseli.
- Górna i lewa ramka (które definiują rozciąganie obrazu) mogą mieć tylko jedną kropkę (1px x 1px), dwie kropki (obie 1px x 1px) lub JEDNĄ linię ciągłą (szerokość x 1px lub 1px x wysokość).
- Jeśli wybierzesz użycie 2 kropek, obraz zostanie proporcjonalnie powiększony (więc każda kropka będzie się powiększać kolejno, aż do osiągnięcia końcowej szerokości / wysokości)
- Obramowanie 1px musi być dodatkiem do zamierzonych podstawowych wymiarów pliku. Tak więc obraz 9 x 100 łatek 100 x 100 musi mieć 102 x 102 (100 x 100 + 1 piksel na górze, dole, lewej i prawej stronie)
- Obrazy 9-patchowe muszą kończyć się na * .9.png
Możesz więc umieścić 1 kropkę po obu stronach logo (w górnej ramce) i 1 kropkę powyżej i poniżej (na lewej ramce), a te oznaczone rzędy i kolumny będą jedynymi pikselami do rozciągnięcia.
Przykład
Oto obraz z 9 łatkami, 102x102px (końcowy rozmiar 100x100, do celów aplikacji):
Oto powiększenie o 200% tego samego obrazu:
Zwróć uwagę na znaczniki 1px u góry i po lewej, które mówią, które wiersze / kolumny będą się rozwijać.
Oto jak wyglądałby ten obraz w rozmiarze 100 x 100 w aplikacji:
A oto, co by chciał, gdyby został rozszerzony do 460 x 140:
Jeszcze jedna rzecz do rozważenia. Te obrazy mogą wyglądać dobrze na ekranie monitora i na większości telefonów komórkowych, ale jeśli urządzenie ma bardzo wysoką gęstość obrazu (dpi), obraz wyglądałby zbyt mały. Prawdopodobnie wciąż czytelny, ale na tablecie o rozdzielczości 1920x1200 obraz wyglądałby jak bardzo mały kwadrat na środku. Więc jakie jest rozwiązanie? Zaprojektuj 4 różne obrazy programu uruchamiającego z 9 łatkami, każdy dla innego zestawu gęstości. Aby mieć pewność, że nie wystąpi kurczenie, należy zaprojektować w najniższej wspólnej rozdzielczości dla każdej kategorii gęstości. Zmniejszanie jest tutaj niepożądane, ponieważ 9-łatka uwzględnia tylko rozciąganie, więc w procesie zmniejszania mały tekst i inne elementy mogą stracić czytelność.
Oto lista najmniejszych, najczęstszych rozdzielczości dla każdej kategorii gęstości:
- xlarge (xhdpi): 640x960
- duży (hdpi): 480 x 800
- średni (mdpi): 320 x 480
- mały (ldpi): 240 x 320
Tak więc zaprojektuj cztery ekrany powitalne w powyższych rozdzielczościach, rozwiń obrazy, umieszczając przezroczyste obramowanie 1px wokół płótna i zaznacz, które rzędy / kolumny będą rozciągliwe. Należy pamiętać, że te obrazy będą używane dla DOWOLNEGO urządzenia w kategorii gęstości, więc obraz ldpi (240 x 320) może zostać rozciągnięty do 1024 x 600 na bardzo dużym tablecie o małej gęstości obrazu (~ 120 dpi). Dlatego 9-łata jest najlepszym rozwiązaniem do rozciągania, o ile nie chcesz zdjęcia lub skomplikowanej grafiki na ekranie powitalnym (pamiętaj o tych ograniczeniach podczas tworzenia projektu).
Ponownie, jedynym sposobem, aby to rozciąganie nie miało miejsca, jest zaprojektowanie jednego ekranu dla każdej rozdzielczości (lub jednego dla każdej kombinacji rozdzielczość-gęstość, jeśli chcesz uniknąć zbyt małych / dużych obrazów na urządzeniach o wysokiej / niskiej gęstości) lub obraz nie powinien się rozciągać, a kolor tła pojawia się wszędzie tam, gdzie nastąpi rozciąganie (pamiętaj również, że określony kolor renderowany przez silnik Android prawdopodobnie będzie wyglądał inaczej niż ten sam konkretny kolor renderowany przez Photoshop, ze względu na profile kolorów).
Mam nadzieję, że to miało jakiś sens. Powodzenia!