Auto.js入门:简单脚本程序编写(基于坐标的触摸模拟)

Auto.js入门:简单脚本程序编写(基于坐标的触摸模拟)

基于坐标的触摸模拟

本章节介绍了一些使用坐标进行点击、滑动的函数。这些函数有的需要安卓7.0以上,有的需要root权限。

要获取要点击的位置的坐标,可以在开发者选项中开启"指针位置"。

基于坐标的脚本通常会有分辨率的问题,这时可以通过setScreenMetrics( ) 函数来进行自动坐标放缩。这个函数会影响本章节的所有点击、长按、滑动等函数。通过设定脚本设计时的分辨率,使得脚本在其他分辨率下自动放缩坐标。

函数说明备注
setScreenMetrics(width, height)设置脚本坐标点击所适合的屏幕宽高。如果脚本运行时,屏幕宽度不一致会自动放缩坐标。对下面所有的函数都有影响
click(x, y)模拟点击坐标(x, y),并返回是否点击成功。只有在点击执行完成后脚本才继续执行。Android7.0及以上有效
longClick(x, y)模拟长按坐标(x, y), 并返回是否成功。只有在长按执行完成(大约600毫秒)时脚本才会继续执行。Android7.0及以上有效
press(x, y, duration)模拟按住坐标(x, y), 并返回是否成功。只有按住操作执行完成时脚本才会继续执行。Android7.0及以上有效
swipe(x1, y1, x2, y2, duration)模拟从坐标(x1, y1)滑动到坐标(x2, y2),并返回是否成功。只有滑动操作执行完成时脚本才会继续执行。Android7.0及以上有效
gesture(duration, [x1, y1], [x2, y2], …)模拟手势操作。Android7.0及以上有效
gestures([delay1, duration1, [x1, y1], [x2, y2], …], [delay2, duration2, [x3, y3], [x4, y4], …], …)同时模拟多个手势。每个手势的参数为[delay, duration, 坐标], delay为延迟多久(毫秒)才执行该手势;duration为手势执行时长;坐标为手势经过的点的坐标。其中delay参数可以省略,默认为0。Android7.0及以上有效

参数注释:
x: 目标点的x坐标
y: 目标点的y坐标
duration: 持续时间,单位是 毫秒(1秒 = 1000毫秒)
delay: 延时执行,单位是 毫秒
id: 多点触摸的id,默认为1
[参数]:表示这些参数在一些情况下可以省略

setScreenMetrics(width, height)

width 屏幕宽度,单位像素
height 屏幕高度,单位像素
设置脚本坐标点击所适合的屏幕宽高。如果脚本运行时,屏幕宽度不一致会自动放缩坐标。

例如在1920*1080的设备中,某个操作的代码为:

setScreenMetrics(1080, 1920);
click(800, 200);
longClick(300, 500);

那么在其他设备上AutoJs会自动放缩坐标以便脚本仍然有效。例如在540 * 960的屏幕中click(800, 200)实际上会点击位置(400, 100)。

注意:以下命令只有Android7.0及以上才有效

click(x, y)

x 要点击的坐标的x值
y 要点击的坐标的y值
模拟点击坐标(x, y),并返回是否点击成功。只有在点击执行完成后脚本才继续执行。
一般而言,只有点击过程(大约150毫秒)中被其他事件中断(例如用户自行点击)才会点击失败。
使用该函数模拟连续点击时可能有点击速度过慢的问题,这时可以用press()函数代替。

longClick(x, y)

x 要长按的坐标的x值
y 要长按的坐标的y值
模拟长按坐标(x, y), 并返回是否成功。只有在长按执行完成(大约600毫秒)时脚本才会继续执行。
一般而言,只有长按过程中被其他事件中断(例如用户自行点击)才会长按失败。

press(x, y, duration)

x 要按住的坐标的x值
y 要按住的坐标的y值
duration 按住时长,单位毫秒
模拟按住坐标(x, y), 并返回是否成功。只有按住操作执行完成时脚本才会继续执行。
如果按住时间过短,那么会被系统认为是点击;如果时长超过500毫秒,则认为是长按。
一般而言,只有按住过程中被其他事件中断才会操作失败。

一个连点器的例子如下:

//循环100次
for(var i = 0; i < 100; i++){
  //点击位置(500, 1000) 每次用时100毫秒
  press(500, 1000, 100);
}
swipe(x1, y1, x2, y2, duration)

x1 滑动的起始坐标的x值
y1 滑动的起始坐标的y值
x2 滑动的结束坐标的x值
y2 滑动的结束坐标的y值
duration 滑动时长,单位毫秒
模拟从坐标(x1, y1)滑动到坐标(x2, y2),并返回是否成功。只有滑动操作执行完成时脚本才会继续执行。
一般而言,只有滑动过程中被其他事件中断才会滑动失败。

gesture(duration, [x1, y1], [x2, y2], …)

duration 手势的时长
[x, y] … 手势滑动路径的一系列坐标
模拟手势操作。例如gesture(1000, [0, 0], [500, 500], [500, 1000])为模拟一个从(0, 0)到(500, 500)到(500, 100)的手势操作,时长为2秒。

gestures([delay1, duration1, [x1, y1], [x2, y2], …], [delay2, duration2, [x3, y3], [x4, y4], …], …)

同时模拟多个手势。每个手势的参数为[delay, duration, 坐标], delay为延迟多久(毫秒)才执行该手势;duration为手势执行时长;坐标为手势经过的点的坐标。其中delay参数可以省略,默认为0。

例如手指捏合:
gestures( [ 0, 500, [800, 300] , [500, 1000] ], [ 0, 500, [300, 1500] , [500, 1000] ] );

注意:以下命令需要root权限

RootAutomator.tap(x, y[, id])

x 横坐标
y 纵坐标
id 多点触摸id,可选,默认为1,可以通过setDefaultId指定。
点击位置(x, y)。其中id是一个整数值,用于区分多点触摸,不同的id表示不同的"手指",例如:

var ra = new RootAutomator();
//让"手指1"点击位置(100, 100)
ra.tap(100, 100, 1);
//让"手指2"点击位置(200, 200);
ra.tap(200, 200, 2);
ra.exit();

如果不需要多点触摸,则不需要id这个参数。 多点触摸通常用于手势或游戏操作,例如模拟双指捏合、双指上滑等。
某些情况下可能存在tap点击无反应的情况,这时可以用**RootAutomator.press()**函数代替。

RootAutomator.swipe(x1, x2, y1, y2[, duration, id])

x1 滑动起点横坐标
y1 滑动起点纵坐标
x2 滑动终点横坐标
y2 滑动终点纵坐标
duration 滑动时长,单位毫秒,默认值为300
id 多点触摸id,可选,默认为1
模拟一次从(x1, y1)到(x2, y2)的时间为duration毫秒的滑动。

RootAutomator.press(x, y, duration[, id])

x 横坐标
y 纵坐标
duration 按下时长
id 多点触摸id,可选,默认为1
模拟按下位置(x, y),时长为duration毫秒。

RootAutomator.longPress(x, y[, id])

x 横坐标
y 纵坐标
duration 按下时长
id 多点触摸id,可选,默认为1
模拟长按位置(x, y)。
以上为简单模拟触摸操作的函数。
如果要模拟一些复杂的手势,需要更底层的函数。

RootAutomator.touchDown(x, y[, id])

x 横坐标
y 纵坐标
id 多点触摸id,可选,默认为1
模拟手指按下位置(x, y)。

RootAutomator.touchMove(x, y[, id])

x 横坐标
y 纵坐标
id 多点触摸id,可选,默认为1
模拟移动手指到位置(x, y)。

RootAutomator.touchUp([id])

id 多点触摸id,可选,默认为1
模拟手指弹起。

  • 11
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值