Android: comment créer un MotionEvent?

MotionEvent n'obtient pas un constructeur, j'ai voulu créer manuellement un MotionEvent dans mon unité de test, puis comment l'obtenir? Grâce.

48
demandé sur fifth 2011-05-03 12:40:03

2 réponses

vous devez utiliser l'une des méthodes statiques obtain de la classe MotionEvent pour créer un nouvel événement.

la manière la plus simple (en plus d'envelopper un nouvel événement à partir d'un existant) est:

static public MotionEvent obtain(long downTime, long eventTime, int action,
        float x, float y, int metaState) {

les Docs de l'API :

créer un nouveau MotionEvent, en remplissant un sous-ensemble des valeurs de mouvement de base. Ceux qui ne sont pas spécifiés ici sont: ID (toujours 0), pression et taille (toujours 1), X et y précision (toujours 1), et edgeFlags (always 0).

paramètres :

  • downTime Le temps (en ms) lors de la utilisateur initialement pressé vers le bas pour commencer un flot d'événements de position. Ce doit être obtenu à partir de SystemClock.uptimeMillis ().
  • eventTime le temps (en ms) lors de la ce événement spécifique a été généré. Ce doit être obtenu à partir de SystemClock.uptimeMillis() .
  • action le type d'action étant réalisée -- l'un ou l'autre 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 méta / touches modificatrices en vigueur lorsque l'événement a été généré.

Lien vers les Docs de l'API

87
répondu rekaszeru 2015-04-17 07:56:35

réponse supplémentaire

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);

Notes

5
répondu Suragch 2017-10-07 08:14:58