Skocz do zawartości
Lucass

Canvas DrawBitmap a dopasowanie do różnych rozdzielczości

    Rekomendowane odpowiedzi

    Lucass

    Cześć,

    mam problem z dopasowaniem animowanej tapety do różnych rozdzielczości ekranów. Weźmy przykładową sytuację:

    - w tle rysuję jedną bitmapę powiedzmy rozdzielczości 480x960

    - na pierwszym planie chcę umieścić niewielką bitmapę 20x20, która będzie dopasowana idealnie w konkretne miejsce - nie może zostać przesunięta.

    Dopasowuje to pod jedną rozdzielczośc i jest cacy. Jednak jak odpalę inną rozdzielczość na emulatorze bitmapa na przedzie rysowana jest już trochę obok - zupełnie niedopasowana.

    Znalazłem sposób żeby to obejść - pobieram rozdzielczość ekranu i wg. niej rysuję w odpowiednim miejscu. Zastanawia mnie jestak kwestia density i boję się że to będzie się rozjeżdzało przy różnych ekranach nawet dla tej samej rozdzielczości. Poza tym jest to podejście trochę prymitywne - szukam czegoś uniwersalnego.

    Próbowałem zamienić współrzędne piksele w DrawBitmap na dip jak poniżej, ale nic to nie dało:

    int pixel = 120;
    final float scale = getResources().getDisplayMetrics().density;
    int dip = (int) (pixel* scale + 0.5f);
    

    najbliżej jest w taki sposób:

    c.drawBitmap(obrazek, 100*wx/480,250*wy/800, null);

    gdzie wx i wy to współczynnik stosunku aktualnej rozdzielczości w pionie/poziomie do rozdzielczości bazowej dla której to dopasowuję (480x800), ale też nie do końca to wychodzi.

    czyli pytanie: wytłumaczcie mi łopatologicznie jak narysować bitmapę (zamienić poniższy kod)

    c.drawBitmap(obrazek, 100,250, null);

    tak żeby znajdowała sie ona w identycznym miejscu ekranu dla wszystkich rozdzielczości?

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    A jakbyś wszystko ładował do jednej bitmapy o danych rozmiarach i później ją rozciągał na canvasie?

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Lucass
    A jakbyś wszystko ładował do jednej bitmapy o danych rozmiarach i później ją rozciągał na canvasie?

    Hmm ale jak to w praktyce zrobić? Jeżeli dobrze rozumiem to ładuję bitmapy bez skalowania a potem skaluję cały canvas? Musze spróbować...

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Bitmap frameBuffer = Bitmap.createBitmap(size[0], size[1], Config.ARGB_8888);
    canvas = new Canvas(frameBuffer);

    Rysujesz sobie na canvasie którego obszarem jest bitmapa i później te bitmape z odpowiednim przeskalowaniem rysujesz na canvasie na ekranie.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x