Jestem naprawdę zmęczony szukaniem rozwiązania dla widoku Scrollview w pionie i poziomie.
Czytałem, że w frameworku nie ma żadnych widoków / układów implementujących tę funkcję, ale potrzebuję czegoś takiego:
Muszę zdefiniować układ w innym, układ podrzędny musi zaimplementować przewijanie w pionie / poziomie do przenoszenia.
Początkowo zaimplementowano kod, który przesuwał układ piksel po pikselu, ale myślę, że to nie jest właściwy sposób. Wypróbowałem to z ScrollView i Horizontal ScrollView, ale nic nie działa tak, jak chcę, ponieważ implementuje tylko przewijanie w pionie lub w poziomie.
Canvas nie jest moim rozwiązaniem, ponieważ muszę dołączyć słuchacze w czyichś elementach potomnych.
Co mogę zrobić?
android
scrollview
Kronos
źródło
źródło
Odpowiedzi:
Łącząc niektóre z powyższych sugestii, udało się uzyskać dobre rozwiązanie:
Niestandardowy widok przewijania:
Niestandardowy poziomy widok przewijania:
ScrollableImageActivity:
Układ:
źródło
LinearLayout
myślę , że nie potrzebujesz początkowego )Ponieważ wydaje się, że jest to pierwszy wynik wyszukiwania w Google dla „Android Vertical + Horizontal ScrollView”, pomyślałem, że powinienem dodać to tutaj. Matt Clark zbudował niestandardowy widok oparty na źródle Androida i wydaje się, że działa on doskonale: Two Dimensional ScrollView
Pamiętaj, że klasa na tej stronie ma błąd obliczający szerokość poziomą widoku. Poprawka autorstwa Manuela Hilty znajduje się w komentarzach:
Edycja: Link już nie działa, ale tutaj jest link do starej wersji posta na blogu .
źródło
fillViewport
ionMeasure
dokładnie tak samo, jak źródło ScrollView (v2.1). Zmieniłem również dwa pierwsze konstruktory za pomocą:this( context, null );
ithis(context, attrs, R.attr.scrollViewStyle);
. Dzięki temu mogę używać paska przewijania za pomocąsetVerticalScrollBarEnabled
isetHorizontalScrollBarEnabled
w kodzie.Znalazłem lepsze rozwiązanie.
XML: (design.xml)
Kod Java:
To działa !!!
Jeśli chcesz załadować inny układ lub formant, struktura jest taka sama.
źródło
Używam go i działa dobrze:
Link do źródła jest tutaj: Android-spa
źródło
ImageView
zawartości jako przewijalnej zawartości, może działać lub nie w przypadku innych dowolnych treści, i że Google uważa, że wystąpią problemy z Twoim podejściem. Opinia Google ma również znaczenie w odniesieniu do przyszłego rozwoju - mogą nie próbować upewnić się, że Twoje podejście działa na dłuższą metę, jeśli w pierwszej kolejności doradza ludziom, aby go nie stosowali.Moje rozwiązanie oparte na odpowiedzi Mahdi Hijazi , ale bez żadnych niestandardowych widoków:
Układ:
Kod (onCreate / onCreateView):
Możesz zmienić kolejność widoków przewijania. Po prostu zmień ich kolejność w układzie i w kodzie. I oczywiście zamiast WthingViewYouWant umieść układ / widoki, które chcesz przewijać w obu kierunkach.
źródło
Opcja nr 1: Możesz wymyślić nowy projekt interfejsu użytkownika, który nie wymaga jednoczesnego przewijania w poziomie i w pionie.
Opcja nr 2: Możesz uzyskać kod źródłowy do
ScrollView
iHorizontalScrollView
, dowiedzieć się, jak zaimplementował je główny zespół Androida, i stworzyć własnąBiDirectionalScrollView
implementację.Opcja nr 3: Możesz pozbyć się zależności, które wymagają od ciebie korzystania z systemu widgetów i rysować bezpośrednio na kanwie.
Opcja nr 4: Jeśli natkniesz się na aplikację typu open source, która wydaje się implementować to, czego szukasz, zobacz, jak to zrobili.
źródło
Spróbuj tego
źródło
ponieważ łącze Two Dimensional Scrollview jest nieaktywne, nie mogłem go pobrać, więc stworzyłem własny komponent. Obsługuje rzucanie i działa prawidłowo dla mnie. Jedynym ograniczeniem jest to, że wrap_content może nie działać poprawnie dla tego komponentu.
https://gist.github.com/androidseb/9902093
źródło
Mam rozwiązanie twojego problemu. Możesz sprawdzić kod ScrollView, który obsługuje tylko przewijanie w pionie i ignoruje poziomy i zmodyfikuj to. Chciałem widoku przypominającego przeglądarkę internetową, więc zmodyfikowałem ScrollView i dobrze mi się to udało. Ale to może nie odpowiadać Twoim potrzebom.
Daj mi znać, do jakiego typu interfejsu użytkownika kierujesz reklamy.
Pozdrowienia,
Ravi Pandit
źródło
Grając z kodem, możesz umieścić HorizontalScrollView w ScrollView. W ten sposób możesz mieć dwie metody przewijania w tym samym widoku.
Źródło: http://androiddevblog.blogspot.com/2009/12/creating-two-dimensions-scroll-view.html
Mam nadzieję, że to ci pomoże.
źródło
używać w ten sposób próbowałem to naprawiłem
Umieść cały układ XML w środku
Wyjaśniłem to w tym łączu, przewijanych razem w pionowym widoku recyklingu i poziomym widoku recyklingu
źródło