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
и т.д. - Спасибо за этот ответ за помощью в этом примере.