2011-06-08 9 views
7

Soy bastante nuevo en la programación de Android y Java (aunque tengo cierta experiencia con C#, eso ayuda).Android: parece que no puede usar MotionEvent.ACTION_MOVE correctamente

En este momento estoy jugando con un par de cosas para saber cómo funciona todo. Realicé una actividad que implementa en TouchListener. He anulado onTouch y tienen un interruptor en event.getAction():

public boolean onTouch(View v, MotionEvent event) 
{ 
    float x; 
    float y;  

    switch (event.getAction()) 
    { 
     case MotionEvent.ACTION_DOWN: // gets called 
     { 
      x = event.getX(); 
      y = event.getY(); 
      circle c = new circle(this, x, y, 10, 0xFFFFFF); 
      _main.addView(c, tapCount++); 
      break; 
     } 
     case MotionEvent.ACTION_MOVE: // doesnt seem to do anything 
     { 
      x = event.getX(); 
      y = event.getY(); 
      circle c = new circle(this, x, y, 10, 0xFFFFFF); 
      _main.addView(c, tapCount++); 
      break; 
     } 
    } 
    return false; 
} 

Donde "círculo" es una clase que dibuja un círculo.

Lo que esperaba ver era un rastro de círculos mientras arrastraba mi dedo sobre la pantalla. En lugar de eso, el círculo solo se dibuja cuando empiezo a tocar.

He comparado mi código con ejemplos (por ejemplo: este blogpost de Google: http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html) y no puedo encontrar mi error.

EDIT: Enlace a la clase completa: http://pastebin.com/tVDQjQhu

EDIT: fijo. Uno tiene que devolver verdadero en la función onTouch(). d'oh!

Respuesta

41

Estaba teniendo el mismo problema al usar MotionEvent.ACTION_MOVE. Para que MotionEvent.ACTION_MOVE funcione, devuelve verdadero en lugar de falso.

+0

1 ¿Tiene usted alguna idea de por qué esto es cómo funciona? ¿Podría señalarnos en la dirección en que está documentado esto, un lugar donde habría una explicación? ¡Gracias! – Mzn

+3

Cuando sobrescribe en TouchEvent el booleano, su booleano de retorno indica si el evento se consumió o no. – stealthcopter

1

tenían los mismos problemas también, no sé si se trata de un error o no, pero me las arreglé para hacer que funcione mediante la adición de OnClickListener a la aplicación, y la aplicación de public void onClick(View v) continuación, además de darle setOnClickListener(this) en el constructor.

11

Para mí solución se

return true 

en la función onTouch a medida que use este

public boolean onTouch(View v, MotionEvent event){ 
float x; 
float y;  

switch (event.getAction()) 
{ 
    case MotionEvent.ACTION_DOWN: // gets called 
    { 
     x = event.getX(); 
     y = event.getY(); 
     circle c = new circle(this, x, y, 10, 0xFFFFFF); 
     _main.addView(c, tapCount++); 
     break; 
    } 
    case MotionEvent.ACTION_MOVE: // doesnt seem to do anything 
    { 
     x = event.getX(); 
     y = event.getY(); 
     circle c = new circle(this, x, y, 10, 0xFFFFFF); 
     _main.addView(c, tapCount++); 
     break; 
    } 
} 
return true; //the problem was here 

}

cuando regrese falsa de onTouch (Ver v, caso MotionEvent), entonces solo se llamará MotionEvent.ACTION_DOWN. por lo que debe devolver verdadero de esta función

Hope esto se ayuda a

Cuestiones relacionadas