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 deSystemClock.uptimeMillis()
. -
action
le type d'action étant réalisée -- l'un ou l'autreACTION_DOWN
,ACTION_MOVE
,ACTION_UP
, ouACTION_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é.
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
- Autres méta-états inclure des choses comme
KeyEvent.META_SHIFT_ON
, etc. - merci à cette réponse pour l'aide avec l'exemple.
5
répondu
Suragch
2017-10-07 08:14:58