多指触控¶
除了常规自动化外,我们还提供了高级多指触控接口,该接口具备硬件轨迹录制、重放、构造、保存等功能,让您可以实现复杂的手指操作。
注意
多指触控接口需要您将客户端升级至最低版本 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")
轨迹构造¶
除了可以通过录制进行轨迹构造外,您也可以选择自行通过代码构造触摸轨迹。下面我们来向您介绍手动构造以及其他可用功能。一个合法的触控操作包含按下、移动、抬起三种事件,您可以为按下、移动等事件设置压力参数。
# 获取一个 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)