2010-07-09 16 views
6

Sto cercando di implementare lo zoom in una app che sto creando e di avere problemi con l'evento onTouch. Sembra che il puntatore delle azioni verso il basso & non si attivi immediatamente, come se non si dovesse ottenere un puntatore verso l'alto o verso il basso fino a quando non si verifica un'azione. Quindi, se entrambe le dita colpiscono lo schermo quasi contemporaneamente, il secondo dito (dovrebbe essere il puntatore (1)) ottiene un'azione di movimento prima che il puntatore venga chiamato, facendo in modo che il codice pensi che sia un DRAG e non un pizzico di zoom. Qualcun altro ha visto questo? Comunque intorno ad esso? Grazie.L'evento onTouch a volte non viene attivato ACTION_POINTER_DOWN

risposta

0

Ho avuto lo stesso problema nel mio progetto. Se tocco lo schermo e le mie dita sono troppo vicine, il sistema non realizza un evento multitouch. Penso che sia perché quando le tue dita sono troppo vicine, il sistema la vede come un dito.

Forse è possibile controllare questa ipotesi utilizzando il metodo getSize() per stimare l'area dello schermo da premere quando si tocca lo schermo con un solo dito e quando si tocca lo schermo con due dita ravvicinate.

+0

Grazie per il consiglio, che tornerà utile sono sicuro. Ma non sono sicuro che questo sia il mio problema in quanto si verifica non importa dove tocchi lo schermo. Usando il debugger posso vedere che gli eventi su e giù del puntatore sembrano essere sempre ritardati e si verificano dopo un evento move (e l'evento move ha sempre un solo puntatore in quell'istanza). Ho anche provato l'app "Dotty" e ho potuto vedere lo stesso comportamento al suo interno. Potrebbe essere un problema hardware? Ho un Evo w/custom ROM. Grazie. – JStew

0

Si è rivelato un problema con la ROM personalizzata che avevo visualizzato sul mio Evo. Grazie ancora ad hara per il loro consiglio, che si è rivelato un altro bug che ho avuto.

1

affrontato lo stesso problema scoperto che ACTION_POINTER_2_DOWN era stato licenziato nella mia app quando ho toccato il secondo dito e dopo che ACTION_MOVE stato licenziato il metodo getAction() indica il numero evento che deve essere controllato contro questa lista

+0

http://developer.android.com/reference/android/view/MotionEvent.html#ACTION_MOVE – Omkar

29

assicurati di includere MotionEvent.ACTION_MASK nel tuo switch. Per esempio:

switch(event.getAction() & MotionEvent.ACTION_MASK){ 
case MotionEvent.ACTION_DOWN: 
some code 
break; 
case MotionEvent.ACTION_POINTER_DOWN: 
ETC 
+0

WOW! Questo in realtà ha risolto il mio problema! Non riesco a capire perché ... ma hey! Grazie: D – Supercelo

+0

You da real mvp @tayler! – Sipty

+0

hai salvato la mia giornata cara .. anche molto! –

0

ho risolto lo stesso problema con questo:

switch(event.getActionMasked()) { 
    case MotionEvent.ACTION_POINTER_DOWN: 
     //your code 
    break; 
} 
0

Ho notato che questo caso (MotionEvent.ACTION_POINTER_DOWN) di essere licenziato se il metodo onTouch (evento) è tornato come vero come indicato di seguito:

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    switch(motionEvent.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_POINTER_DOWN: 
     //your code 
     break ; 
    } 
    return true; 
} 

Nota: MotionEvent.ACTION_DOWN ottenendo soltanto ascoltato se il metodo onTouch() ha r eturned un valore booleano come return super.onTouchEvent (evento); quindi assicurati di essere vero per evitare questa situazione.

Problemi correlati