如何通过ADB shell input实现复杂连续拖拽手势(非swipe命令)
用adb shell input实现不间断曲线/螺旋手势绘制
核心思路
adb shell input touchscreen支持单独发送触摸按下(down)、移动(move)、抬起(up)事件,通过连续发送move事件,配合坐标序列生成,就能实现平滑的不间断曲线/螺旋绘制,替代分段的swipe命令。
操作步骤
确认设备屏幕分辨率
先执行命令获取屏幕尺寸,用于调整后续坐标参数:adb shell wm size示例输出:
Physical size: 1080x2340,对应屏幕中心坐标为540,1170。编写绘制脚本
用bash脚本生成螺旋坐标序列,并连续发送触摸事件。以下是适配1080x2340屏幕的示例脚本(可自行修改参数):#!/bin/bash # 屏幕中心坐标(根据自己设备分辨率调整) CENTER_X=540 CENTER_Y=1170 # 螺旋参数:A为初始半径,B控制螺旋扩张速度 A=0 B=20 # 初始角度(弧度) THETA=0 # 每次迭代的角度增量 DELTA_THETA=0.1 # 绘制总步数(越多螺旋越完整) STEPS=200 # 发送按下事件,起始点为屏幕中心 adb shell input touchscreen down $CENTER_X $CENTER_Y # 循环生成螺旋坐标并发送移动事件 for ((i=0; i<STEPS; i++)) do # 计算当前螺旋半径 R=$(echo "$A + $B * $THETA" | bc -l) # 极坐标转笛卡尔坐标 X=$(echo "$CENTER_X + $R * c($THETA)" | bc -l) Y=$(echo "$CENTER_Y + $R * s($THETA)" | bc -l) # 坐标取整(触摸事件需整数坐标) X_INT=$(printf "%.0f" $X) Y_INT=$(printf "%.0f" $Y) # 发送移动事件 adb shell input touchscreen move $X_INT $Y_INT # 控制绘制速度,可根据需求调整(单位:秒) sleep 0.01 # 更新角度 THETA=$(echo "$THETA + $DELTA_THETA" | bc -l) done # 发送抬起事件,结束手势 adb shell input touchscreen up运行脚本
- 将脚本保存为
spiral.sh - 赋予执行权限:
chmod +x spiral.sh - 连接设备并确保USB调试已开启,执行脚本:
./spiral.sh
- 将脚本保存为
注意事项
- 确保设备已开启USB调试,并在首次连接时授权Ubuntu主机的调试权限
- 调整
CENTER_X/CENTER_Y适配自己的屏幕分辨率 - 修改
B、DELTA_THETA、STEPS参数可以调整螺旋的扩张速度、密度和长度 sleep的时间决定绘制速度,值越小绘制越快,过大会导致手势卡顿
内容的提问来源于stack exchange,提问作者Jannis Erhard
相关产品推荐
相关产品推荐

