You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过adb的sendevent命令实现可指定时长的滑动操作

实现sendevent可控时长匀速滑动的方案

核心原理

sendevent是向系统发送原始输入事件的底层工具,仅发送起点和终点坐标会被识别为瞬间完成的滑动。要实现指定时长的匀速滑动,需要把整个滑动路径拆分为N个细小的步进坐标,每发送一个步进的触摸事件后间隔极短时间,所有步进的总间隔时长等于需要的滑动总时长。

具体实现示例

以下是对应你需求的Shell脚本示例,可实现2秒内从(300,600)匀速滑动到(300,400)的效果:

#!/bin/sh
# 滑动参数配置
X1=300
Y1=600
X2=300
Y2=400
DURATION=2000 # 滑动总时长,单位毫秒
STEP_INTERVAL=10 # 步进间隔,单位毫秒,建议设为5-10保证滑动顺滑

# 计算总步长、每步坐标增量
TOTAL_STEPS=$((DURATION / STEP_INTERVAL))
DELTA_X=$(( (X2 - X1) / TOTAL_STEPS ))
DELTA_Y=$(( (Y2 - Y1) / TOTAL_STEPS ))

# 1. 发送起点按下事件
sendevent /dev/input/event0 3 53 $X1
sendevent /dev/input/event0 3 54 $Y1
sendevent /dev/input/event0 3 48 5
sendevent /dev/input/event0 3 58 50
sendevent /dev/input/event0 0 2 0
sendevent /dev/input/event0 0 0 0

# 2. 循环发送步进滑动事件
CUR_X=$X1
CUR_Y=$Y1
step=1
while [ $step -le $TOTAL_STEPS ]
do
    CUR_X=$((CUR_X + DELTA_X))
    CUR_Y=$((CUR_Y + DELTA_Y))
    # 发送当前步进坐标事件
    sendevent /dev/input/event0 3 53 $CUR_X
    sendevent /dev/input/event0 3 54 $CUR_Y
    sendevent /dev/input/event0 0 2 0
    sendevent /dev/input/event0 0 0 0
    # 等待步进间隔,usleep单位为微秒
    usleep $((STEP_INTERVAL * 1000))
    step=$((step + 1))
done

# 3. 修正终点坐标,避免整数除法误差导致不到位
sendevent /dev/input/event0 3 53 $X2
sendevent /dev/input/event0 3 54 $Y2
sendevent /dev/input/event0 0 2 0
sendevent /dev/input/event0 0 0 0

# 4. 发送抬起事件
sendevent /dev/input/event0 0 2 0
sendevent /dev/input/event0 0 0 0

注意事项

  • 若运行环境没有usleep命令,可替换为sleep $(awk "BEGIN {print $STEP_INTERVAL/1000}")实现浮点延时,精度略低于usleep
  • 部分设备需要额外设置触摸追踪ID,可在按下事件部分添加sendevent /dev/input/event0 3 57 0,抬起事件部分添加sendevent /dev/input/event0 3 57 -1
  • 可根据实际需求修改开头的坐标、时长参数,适配不同的滑动场景

内容的提问来源于stack exchange,提问作者user14881255

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:09:04