2011-10-03 7 views
17

Qualcuno può spiegarmi perché lo onTouchEvent è eseguito due volte e come posso impostarlo per essere eseguito una sola volta? Non sono riuscito a trovare una spiegazione. Grazie.onTouchEvent esegue due volte

@Override 
public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    _iv = new ImageView(this); 

    _map = BitmapFactory.decodeResource(getResources(), R.drawable.image); 

     _iv.setImageBitmap(_map); 
     _iv.invalidate(); 

    setContentView(_iv); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    double X = event.getX(); 
    double Y = event.getY(); 

    Toast.makeText(this, "X: " + X + " Y: " + Y, Toast.LENGTH_SHORT).show(); 

    return super.onTouchEvent(event); 
} 

risposta

34

Esegue per ogni evento. In questo caso sarebbe per l'evento ACTION_DOWN e ACTION_UP. Eseguirà anche per l'evento ACTION_MOVE molte, molte volte.

di averlo eseguire in un solo evento, fare qualcosa di simile:

switch(event.getAction()) 
{ 
    case MotionEvent.ACTION_DOWN: 
    ** CODE ** 
    break; 
    case MotionEvent.ACTION_MOVE: 
    ** CODE ** 
    break; 
    case MotionEvent.ACTION_UP: 
    ** CODE ** 
    break; 
} 
+0

Hi Deev, ho usato onTouchEvent per posizionare un indicatore sul tocco della mappa. Ma ho scoperto che il metodo onTOuchEvent è chiamato più volte. Ho usato lo stesso switch case come descritto qui. Ma ancora il mio metodo viene chiamato più volte. Puoi per favore suggerirmi perché questo sta accadendo – Scorpion

+4

In genere, le cascate di Android suTouchEvent vengono abbassate fino a quando una di esse restituisce "true". Restituisci "true" se il tuo evento touch è stato gestito completamente e dovrebbe fermarsi. – DeeV

+0

Ok. Grazie per la tua risposta veloce. Ci proverò. – Scorpion

-2

Nel istruzione switch, restituire false per tutti gli eventi che non ti servono.

+1

Aggiungi un esempio simile a quello che ha fatto il poster precedente? Altrimenti, questo commento non aggiunge nulla. – coatless