Direction de balayage dans ViewPager
J'ai une application Android qui utilise ViewPager et FragmentStatePagerAdapter. J'ai cependant besoin d'ajouter une nouvelle fonctionnalité dans lequel j'ai besoin de savoir le sens de balayage de passer d'un fragment de vue à l'autre, la gauche ou la droite. (j'.e, quand je balayez vers la gauche, je ferais une chose, et quand je balayez vers la droite, je ferais autre chose).
Veuillez noter, je n'ai pas besoin que les événements se produisent APRÈS que le balayage est en cours. - Je faire de ces événements que le balayage se produit. J'ai pensé à utiliser setOnPageChangeListener()
mais elle ne me dites pas sens de balayage. Pouvez-vous me conseiller s'il vous plaît sur la façon de comprendre sens de balayage?
Grâce.
source d'informationauteur Greeso
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à la
onPageSelected(int position)
méthode de ViewPager.OnPageChangeListener. Leposition
donne l'index de la page nouvellement sélectionnée. Si vous gardez une trace de la page actuelle de l'indice, alors vous pouvez le comparer à laposition
index pour obtenir la gauche ou vers la droite de l'balayage.Maintenant que vous le dites OnPageChangeListener ne vous aide pas, envisager la
onInterceptTouchEvent (MotionEvent ev)
méthode deViewPager
. Prendre en considération les MotionEvent de ACTION_DOWN, ACTION_MOVE et ACTION_UP. Espérons que cette aide.Je suis tombé sur ce problème et ont besoin de savoir la direction de l'balayage qu'il se passait afin d'éviter de glisser dans une certaine direction. Voici comment j'ai résolu mon problème, j'espère que c'est utile à quelqu'un. J'ai trouvé tous les exemples précédents inefficace pour ce dont j'avais besoin.
Si vous sous-classe votre ViewPager, vous pouvez répondre à la
onInterceptTouchEvent(MotionEvent event)
etonTouchEvent(MotionEvent event)
méthodes de laViewPager
Voici la méthode qui est appelée à déterminer la direction de l'événement.
Peut-être que vous pouvez construire un auditeur comme ceci:
C'est assez simple avec l'introduction d'une variable d'instance de garder une trace de la page en cours.
En fait vous pouvez trouver la direction de l'utilisation de paramètres de
onPageScrolled
.Suivant l'auditeur est configuré pour afficher un message du journal une fois par la direction de net fragment de changement ( à gauche si la gauche fragments révèle, au centre si aucun fragment révèle, droit si le droit fragment révèle).
Variables de classe, besoin de garder une trace
L'auditeur
Vous pouvez ajouter un OnPageChangeListner à la ViewPager et faire quelque chose comme ceci:
J'utilise cette petite mise en œuvre pour détecter si l'utilisateur fait défiler vers la droite ou vers la gauche pendant le défilement. Je pourrais avoir quelques bugs lors de certaines conditions que je ne suis pas au courant, mais c'est ce que je pourrais venir avec ce que j'ai besoin, sans avoir à ajouter une touche d'écouteur :
Nous pouvons détecter le sens de défilement parce que lorsque l'utilisateur fait défiler de gauche à droite, les
positionOffset
va de 0 -> 1 et lors du défilement de droite à gauche, il va de 1 -> 0. On peut alors vérifier que la valeur qu'une fois au tout début d'un rouleau et de réinitialiser l'indicateur qu'à la fin du défilement.Nous avons mis l'
currentScrollDirection
à indéterminée à la position de ralenti à la place deonPageSelected
parce queonPageSelected
peut être appelé lorsque l'utilisateur relâche au moyen d'un rouleau et ensuite, vous recevez une fausse lecture.Vous pouvez utiliser
setOnPageChangeListener()
et de mettre en œuvre correctementonPageScrolled(int position, float positionOffset, int positionOffsetPixels)
.Vous pouvez détecter la direction par positionOffset et la position de la variable: