2011-09-28 4 views
5

Tworzę aplikację na Androida, w której chcę obsługiwać wiele ekranów. Do tej pory użyłem 9 łatek.Jak korzystać z 9 obrazów łatek w systemie Android dla różnych gęstości 2 (takich jak mdpi, ldpi, hdpi).?

Ale moje pytanie brzmi, czy użycie 9 obrazów łatek wystarczy dla urządzeń o różnej gęstości 2 lub będę potrzebował stworzyć różne patch-2 9 obrazy dla różnych gęstości (jak mdpi, ldpi, hdpi).

góry dzięki

+1

[Android Korzystanie 9 plastra PNG] (http://adilsoomro.blogspot.com/2012/11/android-how-to-use-9-patch-png.html) –

Odpowiedz

17

Niedawno dowiedziałem się w takiej samej sytuacji, więc pozwól mi boisko i rozwinąć to, co już zostało powiedziane ...

Tak, obrazki 9-patch skalować , po to istnieją. Ale jeśli powinieneś użyć 9-plasterkowego obrazu dla wszystkich gęstości ekranu, to naprawdę zależy to od obrazu. Obrazy 9-plasterkowe są częściej używane, na przykład przyciski. Możesz mieć różne rozmiary przycisków w swojej aplikacji, a 9-plasterkowy obraz pomoże ci sobie z nimi poradzić, bez względu na rozmiar przycisku (o ile obraz 9-plasterkowy jest prawidłowo utworzony).

Ale załóżmy, że projekt przycisków ma naprawdę okrągłe rogi dla wersji hdpi. Tworzysz obraz z 9-plasterkami bez naruszania rogów, ale gdy spojrzysz na to w wersji ldpi, zdasz sobie sprawę, że Twoje rogi są zbyt duże dla tej niskiej rozdzielczości. W tej sytuacji potrzebny jest inny obraz z dziewięcioma łatami z mniej zaokrąglonymi rogami, które lepiej wyglądają w tej rozdzielczości.

Ostateczna odpowiedź brzmi: to naprawdę zależy od twojego wizerunku. Jeśli możesz utworzyć obraz w dziewięciu łatach, który wygląda dobrze we wszystkich gęstościach, niż w porządku, używaj go, ponieważ potrzebujesz tylko jednego obrazu do obsłużenia wszystkich gęstości. Ale jeśli nie wygląda dobrze, ze względu na narożniki, gradienty lub cokolwiek, potrzebna jest jedna 9-łatka obrazu dla każdego gęstości ekranu.

Mam nadzieję, że teraz jest jaśniej.

+0

czy obraz jest normalnym png, a nie 9-pakowym, czy obraz nadal będzie skalowany, czy jest 9-ciowym rzeczywistym wymaganiem dla każdej funkcjonalności wagi? – Vass

+1

@Vass Obraz zostanie przeskalowany, jeśli twój widok ma rozmiar większy niż rozmiar obrazu. Jednak do zapisania z ripowania jest używany 9 obraz patcha. – AB1209

+0

@ AB1209, czy możesz mi powiedzieć, co masz na myśli, mówiąc "oszczędzanie od zgrywania"? – Vass

2

z dokumentacji: nine patch

NinePatchDrawable graficzny jest rozciągliwy obrazu bitmapy, które Android automatycznie zmieni rozmiar, aby pomieścić zawartość widoku, w którym zostały umieszczone go jako tło. Przykładem użycia NinePatch jest tło używane przez standardowe przyciski Androida - przyciski muszą się rozciągać, aby pomieścić ciągi o różnych długościach. Rysowanie NinePatch jest standardowym obrazem PNG, który zawiera dodatkową szerokość o szerokości 1 piksela. Musi zostać zapisany z rozszerzeniem .9.png i zapisany w katalogu res/drawable/twojego projektu.

odpowiedź brzmi nie. ty dziewięć patch skala między różnej wielkości ekranu

+4

że nie jest całkowicie poprawne. Tak, ninepatch będzie skalowany, ale powinieneś nadal wyświetlać obrazy w formacie ldpi/mdpi/hdpi, ponieważ części, które nie są skalowane, powinny mieć również prawidłowy rozmiar. –

+0

Ale co z gęstościami różnych 2? Czy muszę również tworzyć obrazy o wysokiej i niskiej gęstości na 9 stronach? – AB1209

+4

@ AB1209 Nie musisz, ale możesz, gdybyś odkrył, że twoje części NinePatch nie są skalowane. – rf43

0

Krótka odpowiedź brzmi TAK. Sprawdź to:

Domyślnie Android skaluje swoje kanału alfa bitmapy (.png, .jpg i .gif plików) i dziewięć-Patch kanału alfa (.9.png plików) tak, że sprawiają one na odpowiednim wielkości fizycznej na każdym urządzeniu. Na przykład, jeśli aplikacja dostarcza tylko rysunki bitmapowe tylko dla linii podstawowej, o średniej gęstości ekranu (mdpi), system skaluje je na ekranie o dużej gęstości i skaluje je, gdy ekran jest niskiej gęstości. To skalowanie może powodować artefakty w bitmapach . Aby zapewnić najlepszą jakość bitmap, powinieneś dołączyć alternatywne wersje o różnych rozdzielczościach dla różnych gęstości ekranu.

from Android Developer Official Doc