2010-09-03 15 views
8

Moja aplikacja na Androida (oparta na tekście) używa często obrazów tła w celu zapewnienia lepszej atmosfery wizualnej. Na przykład, jeśli akcja w grze przeniesie Cię do tawerny, otrzymasz obraz tawerny w grze. Jest to ogromna poprawa, graficznie, na nudnym czarnym tle, które inaczej byście uzyskali.Obsługa różnych rozdzielczości ekranu dla obrazów tła w Androidzie

Jest to również problem, ponieważ android: tło zawsze rozciąga się do wymiarów ekranu. Powoduje to, że obrazy tła wyglądają bardzo źle, jeśli odtwarzacz przełącza się między trybem pionowym i poziomym. Co gorsza, wiele urządzeń ma bardzo różne współczynniki proporcji (np. 320 x 480 mdpi, 480 x 800 hdpi i 480 x 852 hdpi), a nawet więcej odmian nadchodzi.

Jak inni rozwiązują ten problem? Posiadanie indywidualnych obrazów dla głównych rozdzielczości/orientacji nie jest dla mnie opcją, ponieważ spowodowałoby to zbyt duży wzrost apk.

+0

Dzięki za odpowiedzi. Przepraszam, że mogę zaznaczyć tylko jednego z was. :) –

+0

Romain dostarczył kolejną przydatną odpowiedź na http://stackoverflow.com/questions/3944080/android-avoid-scaling-of-background –

Odpowiedz

2

Proponuję uzyskać szerokość i wysokość bieżącego widoku. W tej chwili nie jestem pewien, jakie funkcje dadzą ci te wartości, ale jestem pewien, że jest to możliwe. Dzięki temu można obliczyć współczynnik kształtu. Sprawiłbym, że obrazy wyglądają jak 1000x1000 i pokazują tylko pewną część obrazu, aby proporcje nie były błędne.
Mam ten sam problem z aparatem. Więc moim rozwiązaniem było wybranie jednej z dwóch wartości, szerokości lub wysokości, jako stałej, i obliczyć poprawną inną wartość zgodnie z proporcjami. Nie jestem pewien, czy istnieją funkcje, które już pokazują część obrazu, ale jestem pewien, że można napisać coś, aby skopiować tylko część obrazu i pokazać tę część.

Wadą jest oczywiście pokazanie tylko części tła. Ponieważ ogólny współczynnik proporcji w telefonach mieści się w przedziale od 1: 1,3 do 1: 1,8, to nie jest to zbyt duży problem. Z jednej strony wolałbym widzieć część obrazu w prawidłowy sposób, niż patrzeć na brzydki, rozciągnięty obraz.

2

Może możesz utworzyć obrazy tła jako obrazy NinePatch, abyś miał lepszą kontrolę nad tym, jak się rozciąga?

W przeciwnym razie można zapobiec rozciągnięciu (lub przynajmniej zachować prawidłowy współczynnik proporcji), ustawiając atrybut np. scaleType. android:scaleType="center".

5

Pierwszym krokiem jest uzyskanie wysokości i szerokości samego urządzenia, a następnie rozciąganie/zmniejszanie lub nakładanie mapy bitowej w razie potrzeby. Ten SO answer ma źródło, które powinno pomóc, skopiowane poniżej. Rekwizyty do Josef do oryginalnej odpowiedzi.

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth(); 
int height = display.getHeight(); 

Oto ogólne źródło informacji o orientacji.

int orientation = display.getOrientation(); 

lub niektóre bardziej zaangażować się źródłem, z here (trochę brudny, ale wygląda poprawne).

Powiązane problemy