Мне нужно смоделировать мультитач-события (масштабирование, панорамирование и т. Д.) Для использования в инструментальных тестах приложения для Android. Одним из способов было бы вручную создать соответствующую последовательность MotionEvent s, имитирующую реальный ввод, а затем отправьте их по одному. Прежде чем я это сделаю, есть ли какой-нибудь хороший API, который делает такое симуляцию? Я думаю, что многие люди столкнулись с этой проблемой в прошлом. Я смотрел на Robotium Solo, но он только обеспечивает touch/drag для одного указателя.Имитировать событие Multitouch в Android Программно для тестирования
Если такого API нет, то как лучше всего подойти к проблеме? Я думал написать функцию, которая принимает пару точек (начало, конец) и продолжительность для каждого участвующего указателя, но это ограничивало бы движения движением линейного указателя.
public void twoFingerTouchEvent(
Point from1, Point to1, int duration1,
Point from2, Point to2, int duration2) {
if (from1.equals(to1) && from2.equals(to2)) {
// two pointer tap
// DISPATCH_DOWN
// DISPATCH_POINTER_DOWN
// WAIT min(duration1, duration2)
// DISPATCH_POINTER_UP
// WAIT abs(duration1 - duration2)
// DISPATCH_UP
}
else if (from1.equals(to1) || from2.equals(to2)) {
// one of two pointers dragged after tap
// DISPATCH_DOWN
// DISPATCH_POINTER_DOWN
// DISPATCH_MOVE for moving pointer every 3-5 pixels, account for duration
// DISPATCH_POINTER_UP
// DISPATCH_UP
}
else {
// two pointer drag
// DISPATCH_DOWN
// DISPATCH_POINTER_DOWN
// DISPATCH_MOVE for both pointers in alternating order every 3-5 pixels
// DISPATCH_POINTER_UP
// DISPATCH_MOVE for pointer with longer duration
// DISPATCH_UP
}
}
Спасибо за ответ! Вы знаете, как имитировать мультитач для API <9? Этот метод, по-видимому, принимает pointerCount, но только координаты одного указателя. Поэтому я не уверен, как использовать его для получения необходимых событий: Представлено в API 5: public static MotionEvent get (long downTime, long eventTime, int action, int pointerCount, float x, float y, float pressure, float size, int metaState, float xPrecision, float yPrecision, int deviceId, int edgeFlags) – zavidovych