Je suis donc en train de développer une application qui doit gérer le multitouch. Fondamentalement, je veux une seule touche pour la rotation (ce n'est pas un problème). Et multitouch pour le défilement.Comment coder pour le multitouch
J'ai le code de base, mais j'ai des problèmes quand le passage du simple au multitouch, et vice verca, se produisent. Fondamentalement, le mouvement va secouer parce que la position médiane du multitouch (deux doigts) et la position absolue de l'unique doigt sont à distance. Donc, si j'ai deux doigts sur l'écran, ils forment une position médiane, puis soulevez un doigt, ce serait comme un mouvement rapide de cette position médiane à la position absolue d'un seul doigt. Ce sera le mouvement que je ne veux pas.
Ceci est mon code:
@Override
public boolean onTouchEvent(MotionEvent event) {
float xEvent[] = new float[ 2 ];
float yEvent[] = new float[ 2 ];
switch(event.getPointerCount()) {
case 1:
xEvent[ 0 ] = event.getX(0);
yEvent[ 0 ] = event.getY(0);
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
camera.onTouchDown(xEvent[ 0 ], yEvent[ 0 ]);
return true;
case MotionEvent.ACTION_MOVE:
camera.onTouchRotate(xEvent[ 0 ], yEvent[ 0 ]);
return true;
default: return super.onTouchEvent(event);
}
case 2:
xEvent[ 0 ] = event.getX(0);
yEvent[ 0 ] = event.getY(0);
xEvent[ 1 ] = event.getX(1);
yEvent[ 1 ] = event.getY(1);
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
camera.onTouchDown(((xEvent[ 0 ] + xEvent[ 1 ])/2), ((yEvent[ 0 ] + yEvent[ 1 ])/2));
return true;
case MotionEvent.ACTION_MOVE:
camera.onTouchSlide(((xEvent[ 0 ] + xEvent[ 1 ])/2), ((yEvent[ 0 ] + yEvent[ 1 ])/2));
return true;
case MotionEvent.ACTION_POINTER_1_UP:
camera.onTouchDown(xEvent[ 1 ], yEvent[ 1 ]);
return true;
case MotionEvent.ACTION_POINTER_2_UP:
camera.onTouchDown(xEvent[ 0 ], yEvent[ 0 ]);
return true;
default: return super.onTouchEvent(event);
}
default: return false;
}
}
La fonction OnTouchDown de l'appareil photo règle que la première valeur du mouvement touche. C'est pourquoi je l'utilise également dans le mouvement vers le haut pour définir une nouvelle valeur de départ pour le mouvement à simple pression en venant d'un multitouch.
J'espère que quelqu'un sait quel est mon problème et peut m'aider plus loin.
Thanx! Je viens de terminer une implémentation qui fonctionne à 80%. Mais après avoir lu ce lien, je pense que je peux faire mieux en utilisant des masques et des identifiants. – Espen