2012-07-05 6 views
6

Die Dokumentation sagt, dass dies dazu:Android - Wie geht man mit zwei Fingerberührung

Eine Geste beginnt mit einem Bewegungsereignis mit ACTION_DOWN, die nach unten der Position des ersten Zeigers zur Verfügung stellt. Wenn jeder zusätzliche Zeiger nach unten oder oben geht, generiert das Framework ein Bewegungsereignis mit ACTION_POINTER_DOWN oder ACTION_POINTER_UP entsprechend.

@Override 
public boolean onTouchEvent(MotionEvent MEvent) 
{ 

    motionaction = MEvent.getAction(); 

    if(motionaction == MotionEvent.ACTION_DOWN) 
    { 
     System.out.println("DEBUG MESSAGE POINTER1 " + MEvent.getActionIndex()); 
    } 

    if(motionaction == MotionEvent.ACTION_POINTER_DOWN) 
    { 
     System.out.println("DEBUG MESSAGE POINTER2 " + MEvent.getActionIndex()); 
    } 

} 

Leider ist die zweite, wenn nicht eingegeben wird:

So habe ich die Überschreibung von onTouchEvent Funktion in meiner Tätigkeit getan. Die Aktivität enthält 2 View mit 2 OnTouchListener, ich weiß, dass onTouchEvent nur aufgerufen wird, wenn die Ansicht der Aktivität nicht das Ereignis konsumieren, also habe ich versucht, in den Listener false zurück und auf diese Weise kann ich nur erkennen erste Fingerberührung, aber dies vermeidet, dass der Zuhörer das Ereignis ACTION_UP erhält und erlaubt mir nicht, die zweite Fingerberührung zu erkennen. Ich habe auch versucht, im Listener True zurück zu geben, aber nachdem ich die onTouchEvent Funktion manuell aufgerufen habe, erlaube ich mir, nur die erste Fingerberührung zu erkennen.

Was ist falsch in meinem Code?

Antwort

15

Ich glaube, Ihr Code die Maskierungsoperation fehlt wie:

switch (motionaction & MotionEvent.ACTION_MASK) { 
case MotionEvent.ACTION_POINTER_DOWN: 
} 

Dieser Code sollte in der Lage für ACTION_POINTER_DOWN zu überprüfen.

Viel Glück & erzählen Sie uns, was passiert.

Tommy Kwee

+0

Ja, das ist das Problem. Das Hinzufügen von 'und' mit ACTION_MASK hat das Problem gelöst. Was mich ärgerlich macht ist, dass ich in der offiziellen Dokumentation nichts darüber sage. – Bemipefe

+0

Bernipefe, ich fühle für Sie, mein Herr. Jeder kann einen Fehler in einer Dokumentation machen. Dies ist wahrscheinlich ein häufiger Fehler, weil Sie manchmal nicht maskieren müssen. Mein einziger Vorschlag für das nächste Mal ist, den Debugger zu verwenden, um zu sehen, welche Werte ankommend sind, und zu sehen, ob einige der Werte wie erwartet sind. Viel Glück an einen anderen Android-Fan! –

+0

Ich kann die ACTION_POINTER_UP und ACTION_POINTER_DOWN greifen, aber ich kann nicht finden, wie man ACTION_MOVE ergreift. Ich kann es in einem einzelnen Finger-Modus in der Ansicht Listener greifen, aber wenn ich den zweiten Finger auf den Bildschirm setzen, das einzige, was ich kann von der onTouchEvent Methode gruppen ist die UP und DOWN und nicht die MOVE-Aktion. Wie kann es reparieren? – Bemipefe