J'ai un problème dans mon application où j'ai besoin d'effectuer une action différente basée sur si un doigt ou deux doigts sont enfoncés.Android 2 doigt tactile déclenchement 1 doigt tactile ainsi que 2 tactile
Actuellement, j'ai le code de suivi:
@Override
public boolean onTouchEvent(MotionEvent event){
int touchX = (int)event.getX();
int touchY = (int)event.getY();
int action = event.getActionMasked();
//Multitouch
if(event.getPointerCount() > 1 && action == MotionEvent.ACTION_POINTER_DOWN){
System.out.println("2 Finger press");
return true;
}
else if(action == MotionEvent.ACTION_DOWN && action != MotionEvent.ACTION_POINTER_DOWN){
if(event.getPointerCount() == 1) {
System.out.println("single finger down");
invalidate();
return true;
}
}
return false;
}
La question que j'ai est quand je presse avec 2 doigts, les registres de pièces multitouch, et après que le fait de la presse unique.
J'ai fait quelques recherches sur les moyens de résoudre ce problème et c'est pourquoi je vérifie sur le simple contact conditionnel que action != MotionEvent.ACTION_POINTER_DOWN
que je pensais régler le problème. Cela n'a pas résolu le problème, donc j'ai décidé de vérifier cela event.getPointerCount() == 1
, mais malheureusement, cela provoque toujours les deux lignes à imprimer lorsque je presse avec 2 doigts.
Pour résumer, je n'ai besoin d'appeler la partie à 2 doigts que lorsque 2 doigts sont enfoncés et pas les deux.
Je vais devoir relire la documentation sur ce point et travailler comment le faire. Je crois que votre code d'échantillon est faux, cependant, il n'enregistre pas du tout 2 doigts. Je pense que cela est dû à secondaryPointerId = -1, ce qui signifie que le conditionnel multi-touch n'est jamais atteint – kalenpw
'secondaryPointerId' doit être attribué lorsqu'une action de' MotionEvent.ACTION_POINTER_DOWN' est reçue. mes mécaniciens sur la façon de référencer l'index d'action correcte peuvent être désactivés (j'ai écrit cela hors de la mémoire), mais l'essentiel est correct. Si 'secondaryPointerId' == -1 c'est parce qu'il y a un (ou aucun) doigt sur la surface. – hsl
Je l'ai regardé plus et le problème est le 'cas MotionEvent.ACTION_POINTER_DOWN' n'est jamais réellement entré et je dois encore comprendre pourquoi, mais à part cela, je pense que c'est correct. Je vois ce que vous voulez dire sur le secondaryPointerId – kalenpw