2016-05-04 2 views
4

Je veux implémenter onScroll, quand un événement de défilement se produit. Cependant, je ne comprends pas comment je peux détecter le défilement de bas en haut avec les paramètres que je reçois avec onScroll (MotionEvent e1, MotionEvent e2, distance floatX, distance floatY).Android - Détecteur de mouvement onScroll

Je serais heureux d'obtenir quelques directives sur la façon de l'implémenter ou quelques exemples.

Répondre

3

Vous devriez pouvoir utiliser le paramètre distanceY pour déterminer si la vue a été déplacée vers le haut ou vers le bas. distanceY représente la distance le long de l'axe Y défilée depuis le dernier appel à onScroll(). Si la valeur distanceY est supérieure à zéro, la vue a été déplacée d'une position inférieure sur l'axe Y vers une position supérieure sur l'axe Y.

@Override 
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
    if (distanceY > 0) { 
     // Scrolled upward 
     if (e2.getAction() = MotionEvent.ACTION_UP) { 
      // The pointer has gone up, ending the gesture 
     } 
    } 
    return false; 
} 

Note: Je ne l'ai pas testé si le MotionEvent.ACTION_UP va résoudre votre besoin de vérifier lors du défilement est terminée, mais il semble en théorie pratique. Notez également que techniquement le geste pourrait également se terminer si l'action MotionEvent est définie sur MotionEvent.ACTION_CANCEL.

+0

Merci pour votre réponse. Dois-je considérer les événements de mouvement? Que contribuent-ils? – Vera

+0

Les 'MotionEvent' contiennent beaucoup plus de données de grain fin sur le mouvement en cours d'exécution tel que l'état tactile. 'e1' est le premier événement descendant qui a commencé le défilement (il reste généralement constant pendant le défilement) tandis que' e2' est l'événement de mouvement qui a déclenché le 'onScroll' actuel. Vous pouvez appeler 'getY' sur les deux événements de mouvement pour calculer le changement de Y, mais' distanceY' devrait pouvoir vous fournir plus simplement la même solution. – Ryan

+0

Super, je comprends. Je vous remercie ! – Vera