2011-12-01 6 views
2

J'ai un SurfaceView et je veux reconnaître le MotionEvent Action_Up, mais seul l'événement Action_Down est déclenché. Aussi je veux reconnaître un autre contact, tandis que le premier doigt est toujours sur l'écran, mais l'événement OnTouch n'est pas déclenché à nouveau.Problèmes liés à Android Touch

@Override 
public boolean onTouch(View arg0, MotionEvent event) { 
    int pointerCount = event.getPointerCount(); 
    if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) { 
     //blabla 
    } else /* if (event.getAction() == android.view.MotionEvent.ACTION_UP) */{ 
     //blabla 
    } 
    return false; 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    int pointerCount = event.getPointerCount(); 
    if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) { 
     //blabla 
    } else /* if (event.getAction() == android.view.MotionEvent.ACTION_UP) */{ 
     //blabla 
    } 
    return super.onTouchEvent(event); 
} 

Le pointeur de pointage est toujours 1, quel que soit le nombre de doigts sur l'écran.

Répondre

1

Vous devez retourner vrai pour un événement ACTION_DOWN dans votre OnTouchListener si vous êtes intéressé à être informé des autres événements associés à cette touche (ACTION_MOVE, ACTION_UP, etc.)

je vous recommande également le suivi des touches SOIT en utilisant un écouteur OU dans la méthode onTouchEvent de la vue ... pas les deux.

HTH

0

Essayez la capture getAction dans une variable au lieu de l'appeler plusieurs fois dans votre OnTouch. Assurez-vous également que vous laissez l'auditeur savoir quand l'action est consommée.

public boolean onTouch(View v, MotionEvent event) { 
      final int action = event.getAction(); 
      boolean consumed = false; 
      switch(action){ 
        case MotionEvent.ACTION_DOWN: 
        //down stuff logic 
          consumed = true; 
        break; 
        case MotionEvent.ACTION_UP: 
        //up stuff logic 
          consumed = true; 
        break; 
        case MotionEvent.ACTION_MOVE: 
        //move stuff logic 
          consumed = true; 
        break; 
      } 
      return consumed; 
    } 

Quant au nombre de doigts sur l'écran, rappelez-support du multitouch a commencé au niveau de l'API 5, donc en fonction de votre téléphone/minSDK vous pourriez ne pas avoir.