2012-12-05 16 views
5

Próbuję zaimplementować nieskończoną karuzelę za pomocą składnika ViewPager. Opierałem się na tym stworzonym przez Antonyt, ale istnieje problem z wykorzystaniem mniej niż 4 widoków. Ponieważ widok już istnieje. Musi to być sposób na okiełznanie Viewpagera, aby narysować ten sam widok/stronę w różnych miejscach.Okrąg widoku z mniej niż 4 widokami

Odpowiedz

0

Rozwiązaniem jest użycie tego samego widoku podrzędnego w ViewPager. Aby to zrobić bez konieczności przypisywania tego samego dziecka rodzicowi, należy użyć ProxyView z rzeczywistym widokiem wewnątrz. Rozszerza, że ​​Fałszywy widok z ViewGroup i nadpisanie metody Draw zrobi lewy!

1

Wpadłem na ten sam problem, sam nie mogłem znaleźć rozwiązania. Ale myślę, że nie da się tego zrobić, używając tylko 1-4 widoków. Problem polega na tym, że wszystkie widoki (na 1-4 obrazy w powtórzeniach) będą tworzone natychmiast (lub przynajmniej w bardzo krótkim odstępie), co koliduje z procesem ładowania obrazu, ponieważ obciążenie wstępne nie zostało zakończone, więc prev jeden zwraca uszkodzony widok. Możesz sobie z tym poradzić.

1) tuż po instancji, zastosowanie obsługi z opóźnieniem 100-200ms odwrócić poprzez widokiem setCurrentItem() kółko (około 10 razy) w obu kierunkach, w ten sposób, przy 4 będzie poza zakresem (jeśli masz limit strony na ekranie, który mam nadzieję, że masz infinte charakter kodu) i zostanie utworzony jeden po drugim później.

2) pomocą obiektów wielokrotnego buforowe,

1 obraz-8 bufory

2 zdjęć-4 buforów dla każdego

3 obrazy-2 buforów dla każdego ... coś takiego .

też nie jest idealnym rozwiązaniem, ale oba działają dla mnie, ale. Chciałbym wiedzieć, co też próbowałeś.

+0

Cześć Shakti, nie mam dość rozwiązania. Czy możesz udostępnić swój kod? – Dayerman

+0

Implementacja okazała się dla mnie skomplikowana z rozproszonym kodem. Podstawową ideą jest sprawienie, aby były tworzone jeden po drugim zamiast wszystkich naraz. Spróbuj coś takiego zrobić. W przypadku buforów należy utworzyć wiele obrazów z taką samą zawartością. – Shakti

+0

Problem polega na tym, że muszę używać tego samego widoku w różnych miejscach, więc nie mogę utworzyć instancji wiele razy, ponieważ będzie to inna instancja. Podobnie jest z problemem dziecka, które jest już powiązane z rodzicem. Rozwiązaniem może być więc narysowanie widoku w 2 miejscach. Które idzie głębiej w strukturę ViewPager. – Dayerman

-1

Wypróbuj następującą sztuczkę, której użyłem z powodzeniem do wykonania (faux) infinite ListView.

W metodzie getCount() adaptera zwróć wartość Integer.MAX_VALUE.

Następnie w adaptera instantiateItem() lub destroyItem(), użyj position % datasource.size()

Ten trik został zaczerpnięty z HERE.

+0

Dlaczego upadek? To działa całkiem dobrze dla List ... –

+0

Cześć Vinay, już użyłem tego rozwiązania. Problem polega na tym, aby działał z mniej niż 4 widokami. – Dayerman

Powiązane problemy