Android: no parece poder usar MotionEvent.ACTION_MOVE correctamente
Soy bastante nuevo en la programación de Android y Java (aunque tengo cierta experiencia con C #, por lo que ayuda).
En este momento estoy goofing alrededor con un par de cosas para llegar a saber cómo funciona todo. He hecho una actividad que implementa onTouchListener. He sobrepasado onTouch y tengo un cambio en event.getAction ():
- Multitouch para Android obteniendo punteros erróneos y / o valores XY
- no puede pasar por referencia para una variable booleana en android
- Cómo setOnTouchListener () en un ListPreference?
- View.onTouchEvent sólo registra el evento ACTION_DOWN
- Determinar qué vista se está tocando actualmente mientras el usuario mueve el dedo
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 por la pantalla. En su lugar, el círculo sólo 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: Corregido. Uno tiene que devolver true en la función onTouch (). D'oh
- ¿Cómo distinguir entre mover y hacer clic en onTouchEvent ()?
- ¿Cómo hacer algo repetidamente mientras se presiona un botón?
- onTouchEvent () of Activity se dispara 3 veces?
- Manejo de eventos táctiles - onInterceptTouchEvent y onTouchEvent
- Disparar Evento táctil desde la vista DialogFragment a la vista de actividad principal
- Android - ¿Cómo circular zoom / ampliar parte de la imagen?
- OnTouchEvent se ejecuta cuando se pasa la página usando ViewPager y PassByValue
- Línea dinámicamente generada con brillo efectivo
Tenía el mismo problema mientras utilizaba MotionEvent.ACTION_MOVE
. Para que MotionEvent.ACTION_MOVE
funcione, devuelva true en lugar de false.
Para mí la solución fue
return true
En la función onTouch, ya que debería utilizar esta función
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 devuelve false de onTouch (Ver v, evento MotionEvent), sólo se llamará a MotionEvent.ACTION_DOWN. Por lo que debe devolver true de esta función
Espero que esto sea de ayuda
Tenía los mismos problemas también, no sé si es un error o no, pero me las arreglé para hacerlo funcionar agregando OnClickListener
a la implementación, e implementando public void onClick(View v)
y añadiendo también setOnClickListener(this)
on the constructor.