2012-07-05 2 views
6

La documentazione dice questo riguardo:Android - Come gestire due tocco delle dita

Un gesto inizia con un evento di movimento con ACTION_DOWN che fornisce la posizione del primo puntatore verso il basso. Come ogni puntatore aggiuntivo che scende o aumenta, il framework genererà un evento di movimento con ACTION_POINTER_DOWN o ACTION_POINTER_UP di conseguenza.

così ho fatto l'override della funzione onTouchEvent nella mia attività:

@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()); 
    } 

} 

Purtroppo il secondo, se non è mai entrato. L'attività contiene 2 view con 2 OnTouchListener, so che onTouchEvent viene chiamato solo se la vista dell'attività non consuma l'evento, quindi ho tentato di restituire false nel listener e in questo modo posso riconoscere solo il il primo tocco con le dita ma questo evita all'ascoltatore di ricevere l'evento ACTION_UP e non mi consente di riconoscere il tocco del secondo dito. Ho anche provato a restituire true nell'ascoltatore, ma dopo aver invocato manualmente la funzione onTouchEvent, ma questo mi consente di riconoscere anche solo il primo tocco del dito.

Cosa c'è che non va nel mio codice?

risposta

15

credo che il codice non è presente l'operazione di mascheramento come:

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

Questo codice dovrebbe essere in grado di verificare la presenza di ACTION_POINTER_DOWN.

Buona fortuna & dirci cosa succede.

Tommy Kwee

+0

Sì, questo è il problema. L'aggiunta di "e" con ACTION_MASK ha risolto il problema. Ciò che mi fa incazzare è che nella documentazione ufficiale non si dice nulla a riguardo. – Bemipefe

+0

Bernipefe, mi sento signore. Chiunque può commettere un errore in una documentazione. Questo è probabilmente un errore comune perché a volte non è necessario mascherare. Il mio unico suggerimento per la prossima volta è di usare il debugger per vedere quali sono i valori in entrata e vedere se qualcuno dei valori è quello che ti aspetti. Buona fortuna ad un altro fan di Android! –

+0

Posso prendere ACTION_POINTER_UP e ACTION_POINTER_DOWN ma non riesco a trovare il modo di afferrare ACTION_MOVE. Posso afferrarlo in modalità single finger nel listener della vista ma quando metto il secondo dito sullo schermo l'unica cosa che posso grupare dal metodo onTouchEvent è l'UP e DOWN e non l'azione MOVE. Come può risolverlo? – Bemipefe