MotionEvent не получает конструктора, я хотел вручную создать MotionEvent в моем unit test, а затем как это получить? Спасибо.
Android: Как создать MotionEvent?
Ответ 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Состояние любого мета/ модификаторы, которые действовали когда событие было создано.
Ответ 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и т.д. - Спасибо за этот ответ за помощью в этом примере.