2016-06-30 1 views
0

Je veux calculer le delta des positions tactiles sur l'écran. Pour cela, je suis en utilisant ce code:Android: moyen le plus simple pour calculer le delta de la position tactile?

public boolean onTouchEvent(MotionEvent event) { 
    touchX = (int) event.getX(); 
    touchY = (int) event.getY(); 

    deltaX = touchX - oldX; 
    deltaY = touchY - oldY; 

    oldX = touchX; 
    oldY = touchY; 

    return super.onTouchEvent(event); 
} 

Maintenant, quand je me déplace le doigt sur l'écran pendant un certain temps, je reçois le delta correct. Mais le problème se produit quand j'arrête mon doigt, mais ne le soulève pas. A ce moment, je viens d'obtenir le delta non nul de la dernière image. C'est parce que onTouchEvent n'est pas appelé lorsque le doigt est à l'écran mais statique. Je devrais obtenir zéro delta quand le doigt est statique.

Quelle est la solution à ce problème?

Répondre

1

Le doigt restant arrêté sur l'écran est et non un MotionEvent, donc cette méthode ne sera pas appelée.

Essayez ceci.

private Handler mHandler = new Handler(); 
private static final int FINGER_STOP_THRESHOLD = 500; 

public boolean onTouchEvent(MotionEvent event) { 
    touchX = (int) event.getX(); 
    touchY = (int) event.getY(); 

    deltaX = touchX - oldX; 
    deltaY = touchY - oldY; 

    oldX = touchX; 
    oldY = touchY; 

    mHandler.removeCallbacksAndMessages(null); 
    if(event.getActionMasked() != MotionEvent.ACTION_UP){ 
     mHandler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       deltaX = 0; 
       deltaY = 0; 
      } 
     }, FINGER_STOP_THRESHOLD); 
    } 

    return super.onTouchEvent(event); 
} 

Vous pouvez remplacer le FINGER_STOP_THRESHOLD par la valeur souhaitée.

+0

J'utilisais la même méthode auparavant sauf la ligne 'mHandler.removeCallbacksAndMessages (null);'. Mais c'était un peu laggy. L'utilisation de votre solution a tué le décalage. Que fait cette ligne? –

+0

Cette ligne supprime toutes les tâches en attente. C'est nécessaire car si un nouvel événement tactile se produit, toutes les attentes précédentes n'ont aucun sens. –