J'utilise un HorizontalScrollView
dans une mise en page et je dois identifier que l'utilisateur a atteint le point de début et de fin du défilement.
Car ListView
j'ai essayé un the onScrollListener
et il est possible de trouver le point de début et de fin du scroll.
J'ai essayé de faire la même chose dans mon Scrollview
mais cela ne semble pas possible. Existe-t-il d'autres moyens possibles de réaliser ce dont j'ai besoin.
onStart
fera l'affaire:hsv.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {@Override public void onScrollChanged() {Log.i(TAG,"scroll:"+hsv.getScrollX());}});
dans onStart () oùhsv
est unHorizontalScrollView
fonctionne.Réponses:
Chaque instance d'appels View
getViewTreeObserver()
. Maintenant, lorsque vous tenez une instance deViewTreeObserver
, vous pouvez y ajouter unOnScrollChangedListener()
à l'aide de la méthodeaddOnScrollChangedListener()
.Vous pouvez voir plus d'informations sur cette classe ici .
Il vous permet d'être au courant de chaque événement de défilement - mais sans les coordonnées. Vous pouvez les obtenir en utilisant
getScrollY()
ou àgetScrollX()
partir de l'auditeur.la source
hsv.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {@Override public void onScrollChanged() {Log.i(TAG,"scroll:"+hsv.getScrollX());}});
dans onStart () oùhsv
est unHorizontalScrollView
fonctionne. Je soupçonne que la même chose fonctionnera pour un ScrollView.add
et nonset
, tous les écouteurs seront conservés jusqu'à ce qu'ils soient explicitement supprimés. Ainsi, la classe anonyme utilisée comme implémentation d'écouteur dans l'exemple fuira (avec tout ce qu'elle fait référence, c'est-à-dire la classe externe).Cela pourrait être très utile. Utilisez à la
NestedScrollView
place deScrollView
. Support Library 23.1 a introduit unOnScrollChangeListener
toNestedScrollView
. Vous pouvez donc faire quelque chose comme ça.la source
NestedScrollView
fait partie de la bibliothèque de support, sasetOnScrollChangeListener
méthode n'a pas d'exigence de version minimale.View
« ssetOnScrollChangeListener
qui requiert un niveau API 23Voici un HorizontalScrollView dérivé que j'ai écrit pour gérer les notifications sur le défilement et la fin du défilement. Il gère correctement lorsqu'un utilisateur a arrêté le défilement actif et lorsqu'il ralentit complètement après qu'un utilisateur lâche prise:
la source
Si vous souhaitez connaître la position de défilement d'une vue, vous pouvez utiliser la fonction d'extension suivante sur la classe View:
la source
Vous pouvez utiliser à la
NestedScrollView
place deScrollView
. Cependant, lors de l'utilisation d'un Kotlin Lambda, il ne saura pas que vous voulez NestedScrollView ausetOnScrollChangeListener
lieu de celui de View (qui est le niveau d'API 23). Vous pouvez résoudre ce problème en spécifiant le premier paramètre en tant que NestedScrollView.la source
vous pouvez définir une classe ScrollView personnalisée et ajouter une interface à appeler lors du défilement comme ceci:
la source
la source