多指触控

除了常规自动化外,我们还提供了高级多指触控接口,让您可以实现复杂的手指操作。具备硬件轨迹录制、重放、构造、保存等功能。

注意

多指触控接口需要您升级客户端至最低 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()

# 录制轨迹,调用后将在超时时间(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)