Multi-Touch

Hallo, ich habe zwei Schaltflächen, die man aber auch gleichzeitig bedienen können soll, ich mach das wie folgt, doch es funktioniert nicht.Eine Schaltfläche reagiert sowohl auf bewegen, als auch auf gedrückt halten, der andere nur auf letzteres.

In der onTouch Methode


case MotionEvent.ACTION_DOWN:
			pressed = true;
			numPointers = e.getPointerCount();
			touchx = new float[numPointers];
			touchy = new float[numPointers];
			for(int i = 0; i < numPointers; i++){
			touchx** = e.getX(i);
			touchy** = e.getY(i);
			}

//...

case MotionEvent.ACTION_MOVE:
			
for(int a = 0; a < numPointers; a++){
if(e.getX(a) > steuerPad.x && e.getX(a) < w && e.getY(a) > steuerPad.y && e.getY(a) < h){					steuerPad.reloadPadPos((int)e.getX(a), (int)e.getY(a));
}
}

case MotionEvent.ACTION_UP:
	pressed = false;

Im Game Loop:

if(pressed){
				
				for(int b = 0; b < numPointers; b++){
				//Hier werden Positionschecks gemacht mit den touchx**/touchy**
				}
//Sonstige Checks mit der Position, die in onTouch mit steuerPad.reloadPadPos gesetzt wurde
			}

Möchtest du beide Flächen gleichzeitig bedienen können oder geht es darum, dass eine Fläche sowohl gedrückt wie auch bewegt werden können soll? Das kommt nicht so ganz raus in obiger Beschreibung.

Beide flächen gleichzeitig

numPointers ist auch wirklich 2? w und h sind für beide gleich? Die If-Abfrage in der Schleife sieht verdächtig aus. Häng dich da mal rein und schau dir an was da beim zweiten Block schief geht.

Ist für mich leider nicht offensichtlich. Ich würd’ mich da erst mal reindebuggen.

Also wenn ich auf meinem Xperia Z1 das Input-Debug aktiviere (dabei werden dann bei drag’n’move entsprechende Linien gezeichnet) ergibt sich das für mein Handy (Android 4.4.4) zwei von einander unabhängige draws. Es sollte also möglich sein zwei (oder eben mehr) Elemente zu tracken. Ich denke da ist nur irgendwo ein kleiner Logik-Fehler.

numPointers ist 1 aber warum ?

Spontan würde ich behaupten weil du ein MotionEvent.ACTION_DOWN hast und dies natürlich nur Informationen über die eine Position hat. Ich kenne mich mit Android nicht aus und weis daher nicht ob es auch ein Event-Type gibt der ausgelöst wird wenn man mit zwei oder mehr Positionen gleichzeitig arbeiten will, kann mir aber vorstellen das ACTION_DOWN dafür die falsche Wahl ist.

Ich habe recherchiert und ich glaube, dass es dan noch ACTION_POINTER_DOWN gibt, aber wenn ich das statt nur ACTION_DOWN schreibe passiert gar nichts

Mir ist jetzt nicht ganz klar was Du vorhast. ACTION_POINTER_DOWN wird erst gesendet sobald mehr als ein Finger die View berührt.
Nachdem was Du bisher beschrieben hast hört es sich so an als hättest Du zwei Views und überschreibst jeweils deren onTouchEvent dann tippst Du mit jeweils einem Finger auf die Views ==> numPointers bleibt immer 1.

Ich habe damit noch nie etwas gemacht, aber wenn Du echtes Multitouch nutzen willst, funktioniert das meines Wissens nur innerhalb einer View.

Vielleicht erläuterst Du mal genauer was Du vorhast, damit man bessere Hinweise geben kann.

Es ist ein View, und wenn Pointer_down erst beim Zweiten aktiviert wird und down beim ersten dann brauch ich also beide Actions, wenn ich will dass man mit zwei fingern etwas gleichzeitig tun kann, oder ?

Korrekt. MotionEvent.ACTION_DOWN für den ersten Pointer und MotionEvent.ACTION_POINTER_DOWN für alle weiteren.
Hier mal ein Beispiel aus einem Tutorial:
http://www.vogella.com/tutorials/AndroidTouch/article.html#multitouch

Danke, das hilft mir echt weiter !