2017-07-21 6 views
2

J'utilise GestureDetector.OnGestureListener pour invoquer la méthode lorsque l'utilisateur déplace le doigt sur l'écran dans la direction spécifiée. Mon problème - il suffit de bouger légèrement et la méthode est appelée, je voudrais que l'utilisateur déplace un peu plus son doigt sur l'écran.La sensibilité du glissement du doigt sur l'écran

public class SwipeListener extends GestureDetector.SimpleOnGestureListener { 
    public static final int MIN_SWIPE_DISTANCE = 40; 


    @Override 
    public boolean onDown(MotionEvent e) { 
     return true; 
    } 


    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     float xDiff = e1.getX() - e2.getX(); 
     float yDiff = e1.getY() - e2.getY(); 
     return resolveSwipe(xDiff, yDiff); 
    } 


    private boolean resolveSwipe(float xDist, float yDist) { 
     float yDistAbs = Math.abs(yDist); 
     float xDistAbs = Math.abs(xDist); 

     SwipeDirection swipeDirection; 


     if (yDistAbs > xDistAbs) { 
      if (yDistAbs < MIN_SWIPE_DISTANCE) {return false;} 
      swipeDirection = (yDist > 0) ? SwipeDirection.DOWN: SwipeDirection.UP; 

     } else { 
      if (xDistAbs < MIN_SWIPE_DISTANCE) {return false;} 
      swipeDirection = (xDist > 0) ? SwipeDirection.RIGHT: SwipeDirection.LEFT; 
     } 

     onSwipeEvent(swipeDirection); 
     return true; 
    } 

    private void onSwipeEvent(SwipeDirection swipeDirection) { 
     if (swipeDirection == SwipeDirection.UP) { 

      return; 
     } 
     if (swipeDirection == SwipeDirection.DOWN) { 

      return; 
     } 
     if (swipeDirection == SwipeDirection.LEFT) { 
     finger1() 
      return; 
     } 
     if (swipeDirection == SwipeDirection.RIGHT) { 
      finger1(); 
      return; 
     } 

} 

public enum SwipeDirection { 
    UP, DOWN, LEFT, RIGHT 
} 

C'est possible? Qu'est-ce que je devrais changer ou ajouter ici?

+0

Si cette valeur change alors rien ne change –

Répondre

0

Vous devez calculer le niveau de l'axe des x ou des y sur lequel vous ne souhaitez effectuer aucune action lors du balayage.

+0

sonne bien, mais comment calculer et mettre en œuvre ce? –

0

Vous devez déclarer distance minimale pour swipe que private static final int SWIPE_MIN_DISTANCE = 160 peut-être cela vous aidera Click here to implement it

+0

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. - [À revoir] (/ review/low-quality-posts/16892191) – jwenting

+0

@jwenting Merci d'avoir suggéré –