Многоточечный ввод

Помимо обычной автоматизации мы также предоставляем расширенный интерфейс многоточечного ввода. Он поддерживает запись траекторий на аппаратном уровне, их воспроизведение, построение и сохранение, что позволяет реализовывать сложные жесты.

Внимание

Для работы с интерфейсом многоточечного ввода необходимо обновить клиент до версии не ниже 9.22. Для наилучшей совместимости рекомендуется также обновить сервер.

Чтобы быстрее понять, как им пользоваться, рекомендуем включить в разделе «Для разработчиков» → «Ввод» параметры «Показывать нажатия» и «Расположение указателя» (если они не включены, вы можете не увидеть никакой обратной связи). В примере ниже показано, как нарисовать символ X в левом верхнем углу экрана.

touch = d.touch()
finger0 = touch.contact(0)
finger1 = touch.contact(1)

# --- 1. Нажатие в начальных точках ---
finger0.down(150, 320)
finger1.down(450, 320)
touch.wait(20)

# --- 2. Перемещение по траектории (10 координатных точек) ---
finger0.move(180, 350)
finger1.move(420, 350)
touch.wait(20)

finger0.move(210, 380)
finger1.move(390, 380)
touch.wait(20)

finger0.move(240, 410)
finger1.move(360, 410)
touch.wait(20)

finger0.move(270, 440)
finger1.move(330, 440)
touch.wait(20)

finger0.move(300, 470) # центральная точка пересечения
finger1.move(300, 470)
touch.wait(20)

finger0.move(330, 500)
finger1.move(270, 500)
touch.wait(20)

finger0.move(360, 530)
finger1.move(240, 530)
touch.wait(20)

finger0.move(390, 560)
finger1.move(210, 560)
touch.wait(20)

finger0.move(420, 590)
finger1.move(180, 590)
touch.wait(20)

finger0.move(450, 620) # конечная точка
finger1.move(150, 620)
touch.wait(20)

# --- 3. Поднятие пальцев ---
finger0.up()
finger1.up()

# Выполнить действие
touch.perform()

Запись траектории

Для удобного построения траекторий мы также предлагаем функцию записи. Для неё необходимо выполнять действия на физическом устройстве.

# Получить сеанс multi-touch
touch = d.touch()

# После вызова record() функция будет ждать, пока вы взаимодействуете с экраном
# физического устройства, в течение тайм-аута (120 секунд).
# Когда все пальцы будут подняты, запись завершится и функция вернёт результат.
touch.record()

# Вы можете сохранить траекторию в двоичный файл
touch.save("/sdcard/touch.bin")

# Вы также можете сразу воспроизвести траекторию
touch.perform()

Хранение траектории

Чтобы не создавать траекторию заново в коде каждый раз, мы предлагаем функцию хранения траекторий для их сохранения в файл.

# Получить сеанс multi-touch
touch = d.touch()

# Вы можете сохранить только что построенную траекторию для последующей загрузки
touch.save("/sdcard/track0.bin")

Загрузка траектории

Вы можете загрузить траекторию в сеанс непосредственно из файла на диске.

# Получить сеанс multi-touch
touch = d.touch()

# Загрузить траекторию из файла
touch.load("/sdcard/track0.bin")

Построение траектории

Помимо создания траектории с помощью записи, вы можете построить сенсорную траекторию самостоятельно в коде. Далее мы расскажем о ручном построении и других доступных возможностях. Корректное сенсорное действие состоит из трёх типов событий: нажатие (down), перемещение (move) и поднятие (up). Для событий нажатия и перемещения можно задавать параметр давления.

# Получить сеанс multi-touch
touch = d.touch()

# Получить два (или более) контакта пальцев
finger0 = touch.contact(0)
finger1 = touch.contact(1)

# Палец 0 нажимает в координатах (150, 320)
# Параметр z означает силу нажатия; допустимые значения — от 1 до 255, по умолчанию 128
finger0.down(150, 320, z=128)

# Палец 0 перемещается из (150, 320) в (180, 350)
finger0.move(180, 350, z=128)

# Подождать 20 миллисекунд (эквивалентно finger0.wait(20))
touch.wait(20)

# Палец 0 поднимается
finger0.up()

# Очистить все траектории
touch.reset()

# Выполнить действие (параметр wait указывает, нужно ли дождаться завершения)
touch.perform(wait=True)