Volver a dibujar durante MotionEvent.ACTION_MOVE en onTouchEvent ()

He creado mi propio componente que extiende RelativeLayout , dentro de él tengo un campo del tipo de la View que se está colocando con los márgenes:

Introduzca aquí la descripción de la imagen

El cuadrado azul representa mi opinión del padre, y un círculo rojo es un niño.

Ahora quiero permitir al usuario mover este círculo rojo mientras mueve un dedo sobre una pantalla. Este es mi método onTouchEvent() :

 @Override public boolean onTouchEvent(MotionEvent event) { int eventAction = event.getAction(); switch (eventAction) { case MotionEvent.ACTION_DOWN: // finger touches the screen break; case MotionEvent.ACTION_MOVE: marginX = (int)event.getX(); marginY = (int)event.getY(); RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)pointer.getLayoutParams(); // pointer is this red circle lp.setMargins(marginX, marginY, 0, 0); break; case MotionEvent.ACTION_UP: // finger leaves the screen break; } return true; } 

Pero rápidamente descubrí que no actualizar su posición mientras el usuario está moviendo su dedo en una pantalla, sino que lo hace sólo cuando el usuario libera el dedo de la pantalla. Así que, básicamente, cuando muevo mi dedo, el círculo permanece en la misma posición, pero cuando dejo de mover, el círculo se dibuja en una nueva posición. Intenté usar el método invalidate() en las vistas de ambos, padre y hijo, pero no ayudó. Supongo que puede tener algo que ver con el hilo de la interfaz de usuario, pero no tengo acceso al runOnUiThread()' method as it's not an actividad.

EDIT: Pasé una actividad a mi clase, para que pueda utilizar runOnUiThread() . Mi case: ACTION_MOVE ahora se parece a esto:

 case MotionEvent.ACTION_MOVE: marginX = (int)event.getX(); marginY = (int)event.getY(); activity.runOnUiThread(new Runnable() { public void run() { RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)pointer.getLayoutParams(); lp.setMargins(marginX, marginY, 0, 0); pointer.invalidate(); } }); break; 

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.