programacion - Android: ¿Cómo crear un MotionEvent?
manual de android en pdf (2)
MotionEvent no obtiene un constructor, quería crear un MotionEvent de forma manual en mi prueba unitaria, ¿cómo conseguirlo? Gracias.
Respuesta suplementaria
Aquí hay un ejemplo que ilustra la respuesta aceptada:
// get the coordinates of the view
int[] coordinates = new int[2];
myView.getLocationOnScreen(coordinates);
// MotionEvent parameters
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
int action = MotionEvent.ACTION_DOWN;
int x = coordinates[0];
int y = coordinates[1];
int metaState = 0;
// dispatch the event
MotionEvent event = MotionEvent.obtain(downTime, eventTime, action, x, y, metaState);
myView.dispatchTouchEvent(event);
Notas
- Otros meta estados incluyen cosas como
KeyEvent.META_SHIFT_ON
, etc. - Gracias a esta respuesta por su ayuda con el ejemplo.
Debe usar uno de los métodos de obtain
estática de la clase MotionEvent
para crear un nuevo evento.
La forma más sencilla (además de envolver un evento nuevo a partir de uno existente) es:
static public MotionEvent obtain(long downTime, long eventTime, int action,
float x, float y, int metaState) {
API Docs :
Crea un nuevo MotionEvent, completando un subconjunto de los valores de movimiento básicos. Los que no se especifican aquí son: ID del dispositivo (siempre 0), presión y tamaño (siempre 1), x e y precisión (siempre 1) y edgeFlags (siempre 0).
Parámetros :
-
downTime
El tiempo (en ms) cuando el usuario presionó inicialmente para iniciar una secuencia de eventos de posición. Esto se debe obtener de SystemClock.uptimeMillis (). -
eventTime
El tiempo (en ms) en que se generó este evento específico. Esto se debe obtener deSystemClock.uptimeMillis()
. -
action
El tipo de acción que se realiza: una deACTION_DOWN
,ACTION_MOVE
,ACTION_UP
oACTION_CANCEL
. -
x
La coordenada X de este evento. -
y
La coordenada Y de este evento. -
metaState
El estado de las teclas de meta / modificador que estaban en vigor cuando se generó el evento.