Генерация мультитач MotionEvents для тестирования - PullRequest
1 голос
/ 03 сентября 2010

В настоящее время я внедряю детектор жестов для событий мультитач на Android.Для тестирования поведения детектора я хочу отправить MotionEvents в детектор и проверить его действия.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я могу создать MotionEvents, только вызвав один из существующих методов MotionEvent.obtain(), но, похоже, эти методы не позволяют мне установить идентификатор указателя для события.Т.е. я могу создавать только события одним касанием.

Кто-нибудь знает, возможно ли это как-то сделать?Я мог бы использовать другую структуру данных для ввода в детектор, но, если возможно, я хочу избежать этого и придерживаться класса MotionEvent.

Ответы [ 3 ]

1 голос
/ 18 января 2011

В итоге я установил уровень API своего тестового проекта на 9, в то время как основной проект все еще API 7, поэтому я могу использовать новый MotionEvent.obtain с PointerCoords [] в моих тестах. Работает нормально.

1 голос
/ 18 января 2011

Вы пробовали:

public static MotionEvent obtain (long downTime, long eventTime, int action, 
int pointers, int[] pointerIds, PointerCoords[] pointerCoords, int metaState, 
float xPrecision, float yPrecision, int deviceId, int edgeFlags, int source, int flags)

, который является третьим методом получения (), перечисленным на странице MotionEvent

Можно указать:

  • pointers - Количество точек, которые будут в этом событии.
  • pointerIds - Массив значений указателей, предоставляющий идентификатор для каждого указателя.
  • pointerCoords - Массив значений указателей, предоставляющий объект координат MotionEvent.PointerCoords для каждого указателя.
0 голосов
/ 18 января 2011

В Android SDK 2.3 есть новый метод, как уже упоминалось f20k, который решает проблему.

Но в настоящее время я застрял с API-уровнем 7 (2.1).Мое решение состояло в том, чтобы добавить слой между моим кодом обработки касаний и фактическими событиями, которые я получаю от Android, просто преобразовав в свой собственный класс MotionEvent (я назвал его TouchInfo).Кроме того, это позволило мне реализовать всю обработку жестов на JVM, что позволило мне управлять кодом с помощью TDD.Я мог бы сделать это и с помощью тестов Android JUnit, но разработка кода на JVM позволила мне использовать такие вещи, как junit4, hamcrest и mockito.

Третий способ - использовать robolectric если вы не хотите добавлять слой.

...