Używam HorizontalScrollView
w układzie i muszę zidentyfikować użytkownika, który osiągnął punkt początkowy i końcowy przewijania.
Ponieważ ListView
próbowałem onScrollListener
i można znaleźć początek i koniec przewijania.
Próbowałem zrobić to samo w moim, Scrollview
ale wydaje się to niemożliwe. Czy są inne możliwe sposoby osiągnięcia tego, czego potrzebuję?
android
listener
scrollview
arnp
źródło
źródło
onStart
rade:hsv.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {@Override public void onScrollChanged() {Log.i(TAG,"scroll:"+hsv.getScrollX());}});
w onStart () gdziehsv
jest toHorizontalScrollView
prace.Odpowiedzi:
Każde wystąpienie wywołania View
getViewTreeObserver()
. Teraz, gdy trzymasz instancjęViewTreeObserver
, możesz dodaćOnScrollChangedListener()
do niej za pomocą metodyaddOnScrollChangedListener()
.Więcej informacji o tych zajęciach znajdziesz tutaj .
Pozwala być świadomym każdego zdarzenia przewijania - ale bez współrzędnych. Możesz je jednak uzyskać, używając
getScrollY()
lubgetScrollX()
z poziomu słuchacza.źródło
hsv.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {@Override public void onScrollChanged() {Log.i(TAG,"scroll:"+hsv.getScrollX());}});
w onStart () gdziehsv
jest toHorizontalScrollView
prace. Podejrzewam, że to samo zadziała również dla ScrollView.add
i nieset
, wszystkie detektory zostaną zachowane, dopóki nie zostaną jawnie usunięte. Więc anonimowa klasa użyta jako implementacja nasłuchiwania w przykładzie wycieknie (wraz z wszystkim, do czego się odwołuje, tj. Klasą zewnętrzną).To może być bardzo przydatne. Użyj
NestedScrollView
zamiastScrollView
. Support Library 23.1 wprowadziłOnScrollChangeListener
doNestedScrollView
. Możesz więc zrobić coś takiego.źródło
NestedScrollView
jest częścią biblioteki wsparcia, jegosetOnScrollChangeListener
metoda nie wymaga minimalnej wersji.View
„ssetOnScrollChangeListener
, która wymaga poziom API 23Oto pochodny HorizontalScrollView, który napisałem do obsługi powiadomień o przewijaniu i kończeniu przewijania. Prawidłowo radzi sobie z sytuacjami, gdy użytkownik przestał aktywnie przewijać i gdy całkowicie zwalnia po puszczeniu przez użytkownika:
źródło
Jeśli chcesz poznać pozycję przewijania widoku, możesz użyć następującej funkcji rozszerzenia w klasie View:
źródło
Możesz użyć
NestedScrollView
zamiastScrollView
. Jednak gdy używasz Kotlin Lambda, nie będzie wiedział, że chcesz NestedScrollViewsetOnScrollChangeListener
zamiast tego w widoku (który jest na poziomie API 23). Możesz to naprawić, określając pierwszy parametr jako NestedScrollView.źródło
możesz zdefiniować niestandardową klasę ScrollView i dodać interfejs, który będzie wywoływany podczas przewijania w następujący sposób:
źródło
źródło