Многоточечный ввод¶
Помимо обычной автоматизации мы также предоставляем расширенный интерфейс многоточечного ввода. Он поддерживает запись траекторий на аппаратном уровне, их воспроизведение, построение и сохранение, что позволяет реализовывать сложные жесты.
Внимание
Для работы с интерфейсом многоточечного ввода необходимо обновить клиент до версии не ниже 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)