Android: как создать MotionEvent?

MotionEvent не получает конструктор, я хотел вручную создать MotionEvent в моем модульном тесте, тогда как это получить? Благодарю.

2 ответа

Решение

Вы должны использовать один из статических obtain методы MotionEvent класс для создания нового события.

Самый простой способ (помимо переноса нового события из существующего):

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

Документы API:

Создайте новое MotionEvent, заполнив подмножество основных значений движения. Здесь не указаны: идентификатор устройства (всегда 0), давление и размер (всегда 1), точность по x и y (всегда 1) и edgeFlags (всегда 0).

Параметры:

  • downTime Время (в мс), когда пользователь первоначально нажал, чтобы начать поток событий положения. Это должно быть получено из SystemClock.uptimeMillis().
  • eventTime Время (в мс), когда это конкретное событие было сгенерировано. Это должно быть получено отSystemClock.uptimeMillis(),
  • action Тип выполняемого действия - один изACTION_DOWN, ACTION_MOVE,ACTION_UP, или же ACTION_CANCEL,
  • x Координата X этого события.
  • y Координата Y этого события.
  • metaState Состояние любых ключей мета / модификаторов, которые действовали при создании события.

Ссылка на API Документы

Дополнительный ответ

Вот пример, иллюстрирующий принятый ответ:

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

Заметки

Другие вопросы по тегам