MotionEvent n'a pas de constructeur, je voulais créer manuellement un MotionEvent dans mon test unitaire, alors comment l'obtenir? Merci.
Vous devez utiliser l'une des méthodes statiques obtain
de la classe MotionEvent
pour créer un nouvel événement.
La façon la plus simple (en plus d'envelopper un nouvel événement à partir d'un événement existant) est:
static public MotionEvent obtain(long downTime, long eventTime, int action,
float x, float y, int metaState) {
Documents API :
Créez un nouvel événement MotionEvent en remplissant un sous-ensemble des valeurs de mouvement de base. Ceux qui ne sont pas spécifiés ici sont: l'ID de l'appareil (toujours 0), la pression et la taille (toujours 1), la précision x et y (toujours 1) et edgeFlags (toujours 0).
Paramètres :
downTime
Heure (en ms) à laquelle l'utilisateur a initialement appuyé pour démarrer un flux d'événements de position. Cela doit être obtenu auprès de SystemClock.uptimeMillis ().eventTime
L'heure (en ms) à laquelle cet événement spécifique a été généré. Cela doit être obtenu à partir de SystemClock.uptimeMillis()
.action
Le type d'action en cours d'exécution - l'une de ACTION_DOWN
, ACTION_MOVE
, ACTION_UP
ou ACTION_CANCEL
.x
La coordonnée X de cet événement.y
La coordonnée Y de cet événement.metaState
L'état de toutes les touches de méta/modificateur qui étaient en vigueur lorsque l'événement a été généré.Voici un exemple illustrant la réponse acceptée:
// 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);
KeyEvent.META_SHIFT_ON
, etc.