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

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

Ответ 1

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

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

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

Документы API:

Создайте новый MotionEvent, заполнив подмножество основных значений движения. Те, которые не указаны здесь: устройство id (всегда 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

Ответ 2

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

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

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

Примечания

  • Другие meta states включают такие вещи, как KeyEvent.META_SHIFT_ON и т.д.
  • Спасибо за этот ответ за помощью в этом примере.