2011-10-03 30 views
17

¿Alguien me puede explicar por qué se ejecuta el onTouchEvent dos veces y cómo puedo configurarlo para que se ejecute solo una vez? No pude encontrar una explicación. Gracias.onTouchEvent se ejecuta dos veces

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

Respuesta

34

Se ejecuta para cada evento. En este caso, sería para el evento ACTION_DOWN y ACTION_UP. También se ejecutará para el evento ACTION_MOVE muchas, muchas veces.

tenerlo sólo se ejecuta en un solo evento, hacer algo como esto:

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

Hola Deev, utilicé en TouchEvent para colocar marcador en el toque del mapa. Pero descubrí que el método de ENTOuchEvent se llama varias veces. Usé la misma caja del interruptor como se describe aquí. Pero aún mi método recibe múltiples llamadas. ¿Puede por favor sugerirme por qué sucede esto? – Scorpion

+4

Android en general cae en cascada en las vistas hacia abajo de TouchEvents hasta que una de ellas devuelve "verdadero". Devuelve "verdadero" si tu evento táctil se ha manejado completamente y debería detenerse. – DeeV

+0

Ok. Gracias por su respuesta rápida. Voy a intentar esto. – Scorpion

-2

En la sentencia switch, return false para todos los eventos que no necesita.

+1

¿Agregar ejemplo similar a lo que hizo el cartel anterior? De lo contrario, estos comentarios no agrega nada. – coatless

Cuestiones relacionadas