Ich verwende ein HorizontalScrollView
in einem Layout und muss identifizieren, dass der Benutzer den Start- und Endpunkt der Schriftrolle erreicht hat.
Denn ListView
ich habe es mit einem versucht onScrollListener
und es ist möglich, den Start- und Endpunkt der Schriftrolle zu finden.
Ich habe versucht, dasselbe in meinem zu tun, Scrollview
aber es scheint nicht möglich zu sein. Gibt es andere Möglichkeiten, um das zu erreichen, was ich brauche?
android
listener
scrollview
arnp
quelle
quelle
onStart
:hsv.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {@Override public void onScrollChanged() {Log.i(TAG,"scroll:"+hsv.getScrollX());}});
in onStart () wohsv
ist einHorizontalScrollView
Werk.Antworten:
Jede Instanz von View ruft auf
getViewTreeObserver()
. WennViewTreeObserver
Sie jetzt eine Instanz von halten , können SieOnScrollChangedListener()
diese mithilfe der Methode hinzufügenaddOnScrollChangedListener()
.Weitere Informationen zu dieser Klasse finden Sie hier .
Sie können jedes Bildlaufereignis erkennen - jedoch ohne die Koordinaten. Sie können sie jedoch mithilfe
getScrollY()
odergetScrollX()
innerhalb des Listeners abrufen.quelle
hsv.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {@Override public void onScrollChanged() {Log.i(TAG,"scroll:"+hsv.getScrollX());}});
in onStart () wohsv
ist einHorizontalScrollView
funktioniert. Ich vermute, dass dies auch für eine ScrollView funktioniert.add
und nichtset
, bleiben alle Listener erhalten, bis sie explizit entfernt werden. Die anonyme Klasse, die im Beispiel als Listener-Implementierung verwendet wird, leckt also (zusammen mit allem, worauf sie verweist, dh der äußeren Klasse).Dies könnte sehr nützlich sein. Verwenden Sie
NestedScrollView
anstelle vonScrollView
. Support Library 23.1 führte einOnScrollChangeListener
zuNestedScrollView
. Sie können also so etwas tun.quelle
NestedScrollView
ist Teil der Support-Bibliothek. Für diesetOnScrollChangeListener
Methode sind keine Mindestversionsanforderungen erforderlich.View
's, fürsetOnScrollChangeListener
die API Level 23 erforderlich istHier ist eine abgeleitete HorizontalScrollView, die ich geschrieben habe, um Benachrichtigungen über das Scrollen und das Scrollende zu verarbeiten. Es wird ordnungsgemäß behandelt, wenn ein Benutzer aufgehört hat, aktiv zu scrollen, und wenn es vollständig abgebremst ist, nachdem ein Benutzer losgelassen hat:
quelle
Wenn Sie die Bildlaufposition einer Ansicht kennen möchten, können Sie die folgende Erweiterungsfunktion für die Ansichtsklasse verwenden:
quelle
Sie können
NestedScrollView
anstelle von verwendenScrollView
. Wenn Sie jedoch ein Kotlin Lambda verwenden, wissen Sie nicht, dass Sie NestedScrollViewssetOnScrollChangeListener
anstelle von View (View API Level 23) möchten . Sie können dies beheben, indem Sie den ersten Parameter als NestedScrollView angeben.quelle
quelle
Sie können eine benutzerdefinierte ScrollView-Klasse definieren und eine Schnittstelle hinzufügen, die beim Scrollen wie folgt aufgerufen wird:
quelle