基本操作
from ascript.android import action
模拟 手指 操作
点击
模拟 手指点击屏幕
- 函数
action.click(x:int,y:int,dur:int = 20):
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
x | int | 是 | 要点击的屏幕X坐标 |
y | int | 是 | 要点击的屏幕Y坐标 |
dur | float | 否 | 点击持续时间,默认20毫秒 |
- 示例
# 模拟手指点击屏幕坐标 (898,1916)
from ascript.android import action
action.click(898,1916)
# 模拟手指长按屏幕坐标 (898,1916) 按住两秒不放
from ascript.android import action
action.click(898,1916,2000)
滑动
模拟 手指滑动屏幕
- 函数
action.slide(x:int,y:int,x1:int,y1:int,dur:int=20)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
x | int | 是 | 滑动起始点X坐标 |
y | int | 是 | 滑动起始点Y坐标 |
x1 | int | 是 | 滑动结束点X坐标 |
y1 | int | 是 | 滑动结束点Y坐标 |
dur | float | 否 | 滑动持续时间,默认20毫秒 |
interpolator | java Interpolator | 否 | 默认None,差速器. 可以实现各种加减速滑动效果 |
control_points=None | list或int | 否 | 贝塞尔控制点 |
- 示例
# 模拟手指滑动屏幕 从坐标(157,798) 滑动至坐标(946,834) ,耗时20毫秒
from ascript.android import action
action.slide(157,798,946,834)
# 模拟手指滑动屏幕 从坐标(157,798) 滑动至坐标(946,834) ,耗时3000毫秒
from ascript.android import action
action.slide(157,798,946,834,3000)
# 加速插值。动画开始时较慢,然后逐渐加速
from android.view.animation import AccelerateInterpolator
action.slide(644,739,625,2000,2000,AccelerateInterpolator())
# 减速插值。动画开始时较快,然后逐渐减速。
# from android.view.animation import DecelerateInterpolator
# action.slide(644,739,625,2000,2000,DecelerateInterpolator())
# 更多有趣差速器,见下文
# 模拟人手真实抖动
from ascript.android import action
from android.view.animation import DecelerateInterpolator
action.slide(157,798,946,834,3000,DecelerateInterpolator(),control_points=0)
# 随机生成100组贝塞尔控制点
# action.slide(157,798,946,834,3000,control_points=100)
# 自定义2组贝塞尔控制点
# action.slide(157,798,946,834,3000,control_points=[100,100,60,60])
关于差速器
我们可以借助android 原生差速器实现各种效果, 如 加速、减速、先加后减,等各种效果.
差速器部分,使用android.view.animation.Interpolato
这意味着我们可以直接导入android 的所有差速器类
LinearInterpolator
- 导入:
from android.view.animation import LinearInterpolator
- 效果: 线性插值。动画从开始到结束以恒定速度进行,没有加速或减速。
- 参数: 无。
- 构造函数:
LinearInterpolator()
- 用途: 简单、均匀的过渡,如匀速移动、渐变。
AccelerateInterpolator
- 导入:
from android.view.animation import AccelerateInterpolator
- 效果: 加速插值。动画开始时较慢,然后逐渐加速。
- 参数:
factor
(float): 控制加速度的指数。值越大,开始时越慢,加速越明显。默认值为1.0f
,对应 t² 的曲线。
- 构造函数:
AccelerateInterpolator()
(使用默认factor
1.0f)AccelerateInterpolator(float factor)
- 用途: 模拟物体启动、元素滑入屏幕。
DecelerateInterpolator
- 导入:
from android.view.animation import DecelerateInterpolator
- 效果: 减速插值。动画开始时较快,然后逐渐减速。
- 参数:
factor
(float): 控制减速度的指数。值越大,开始时越快,结束时减速越明显。默认值为1.0f
。
- 构造函数:
DecelerateInterpolator()
(使用默认factor
1.0f)DecelerateInterpolator(float factor)
- 用途: 模拟物体停止(如受摩擦力影响)、元素滑出屏幕。
AccelerateDecelerateInterpolator
- 导入:
from android.view.animation import AccelerateDecelerateInterpolator
- 效果: 先加速后减速插值。动画开始和结束时慢,中间速度最快。形成一个平滑的 "S" 形速度曲线(Ease-in, Ease-out)。
- 参数: 无。
- 构造函数:
AccelerateDecelerateInterpolator()
- 用途: 非常 常用,用于创建自然、平滑的 UI 过渡效果,是最符合物理直觉的缓动之一。
OvershootInterpolator
- 导入:
from android.view.animation import OvershootInterpolator
- 效果: 超出目标插值。动画会超过其最终目标值一点,然后再回弹到最终值。
- 参数:
tension
(float): 控制超出量(张力)。值越大,超出的幅度越大。默认值为2.0f
。
- 构造函数:
OvershootInterpolator()
(使用默认tension
2.0f)OvershootInterpolator(float tension)
- 用途: 增加趣味性和弹性,模拟弹簧效果,例如一个窗口弹出时稍微放大再恢复。
AnticipateInterpolator
- 导入:
from android.view.animation import AnticipateInterpolator
- 效果: 预期插值。动画开始前会先向相反方向移动一点,然后再朝最终目标移动。
- 参数:
tension
(float): 控制“后退”的量(张力)。值越大,后退的幅度越大。默认值为2.0f
。
- 构造函数:
AnticipateInterpolator()
(使用默认tension
2.0f)AnticipateInterpolator(float tension)
- 用途: 模拟“蓄力”或“预备”动作,增加动画的戏剧性或强调开始的动作。
AnticipateOvershootInterpolator
- 导入:
from android.view.animation import AnticipateOvershootInterpolator
- 效果: 预期超出插值。结合了
AnticipateInterpolator
和OvershootInterpolator
的效果。动画先向后退,然后向前冲过目标值,最后回弹到目标值。 - 参数:
tension
(float): 同时影响后退和超出的基础张力。默认值为2.0f
。extraTension
(float): 额外的张力因子,仅作用于超出部分 (最终超出张力 =tension * extraTension
)。默认值为1.5f
。
- 构造函数:
AnticipateOvershootInterpolator()
(使用默认tension
2.0f,extraTension
1.5f)AnticipateOvershootInterpolator(float tension)
(使用指定tension
, 默认extraTension
1.5f)AnticipateOvershootInterpolator(float tension, float extraTension)
- 用途: 创建非常动态、富有弹性和趣味性的动画效果。
BounceInterpolator
- 导入:
from android.view.animation import BounceInterpolator
- 效果: 弹跳插值。动画在接近结束时会像球落地一样进行几次弹跳,幅度逐渐减小,最后停在目标值。
- 参数: 无。弹跳的物理模拟是内建的。
- 构造函数:
BounceInterpolator()
- 用途: 模拟物体掉落并弹跳的效果,或者给 UI 元素增加活泼、有趣的安顿方式。
关于贝塞尔控制点
关于贝塞尔曲线
所谓贝塞尔曲线即 直线外 一个控制点,则可让直线改变为一条曲线.
1次贝塞尔曲线 = 1组控制点
2次贝塞尔曲线 = 2组控制点
n次贝塞尔曲线 = n组控制点
control_points 参数
- control_points = 0 #模拟真实人手抖动
- control_points = 100 # 随机生成 100组控制点
- control_points = [100,100] # 一个控制点100,100,这个就是1次贝塞尔曲线,自己写控制点
- control_points = [100,100,50,50] # 2 组控制点, 这就是2次贝塞尔曲线
输入
模拟 输入文本
- 函数
action.input(msg:str="",selector:Selector=None)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
msg | str | 是 | 输入的内容 |
selector | Selector | 否 | 控件检索规则 当Selector 为None时,您的输入框必须已经获取了焦点 |
- 示例
# 模拟在当前 ‘已获取焦点’的的文本框中输入‘你好 aslib!’
from ascript.android import action
action.input("你好 aslib!")
# 模拟在 控件检查器查到的 文本框中输入‘你好 aslib!’
from ascript.android import action
from ascript.android.node import Selector
selector = Selector().id("com.aojoy.airscript:id/search_bar_text")
action.input("你好 aslib!",selector)
触摸
模拟 手指 按下,移动,抬起
#class
action.Touch
按下
模拟 手指按下
action.Touch.down(x,y,dur:int=20)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
x | int | 是 | 触摸X点坐标 |
y | int | 是 | 触摸Y点坐标 |
dur | float | 否 | 动作持续时间,默认20毫秒 |
移动
模拟 手指移动
action.Touch.move(x, y, dur: int = 20)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
x | int | 是 | 触摸X点坐标 |
y | int | 是 | 触摸Y点坐标 |
dur | float | 否 | 动作持续时间,默认20毫秒 |
抬起
模拟 手指抬起
action.Touch.up(x, y, dur: int = 20)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
x | int | 是 | 触摸X点坐标 |
y | int | 是 | 触摸Y点坐标 |
dur | float | 否 | 动作持续时间,默认20毫秒 |
# 一个完整的 触摸 操作
from ascript.android import action
# 从坐标(100,200)的位置按下
action.Touch.down(299,629)
# 按下的同时,移动到坐标(300,300)
action.Touch.move(780,645)
# 按下的同时,再次移动到坐标(400,350),移动用时 1000毫秒
action.Touch.move(445,1152,1000)
# 移动至坐标(450,400)位置 抬起
action.Touch.up(445,1152)
按键
模拟 模拟按键操作
#class
action.Key
Home键
模拟设备 Home按键
action.Key.home()
返回键
模拟设备 返回按键
action.Key.back()
弹出通知栏
模拟设备 调出通知栏
action.Key.notifactions()
任务栏键
模拟设备 任务栏键
action.Key.recents()
截屏键
模拟设备 关闭屏幕
action.Key.screenshot()
锁屏键
模拟设备 关闭屏幕
action.Key.lockscreen()
手指路径
模拟手指 移动路径
#class
from ascript.android.action import Path
创建路径
创建一根手指路径, 多根手指创建多个即可.
Path(self,start_time:int=0, duration:int=20, will_continue:bool=False)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
start_time | int | 否 | 延迟执行时间 |
duration | int | 否 | 路径执行时常 |
will_continue | bool | 否 | 执行完毕后,是否抬起手指 True:抬起 False:不抬起,下一个手势将连续执行 |
from ascript.android.action import Path
line1 = Path(0,1000);
# 移动初始点
line1.moveTo(804,708)
# 画直线到点
line1.lineTo(827,1479)
# 使用二次贝塞尔曲线 从点(500,800) 到 (250,900)
line1.quadTo(500,800,250,900)
路径方法
Path 实现了 android.graphics.Path 中的大部分方法.
具体参数参考:android.graphics.Path
支持的绘制方法如下 | |
---|---|
moveTo | rCubicTo |
lineTo | rMoveTo |
quadTo | reset |
rCubicTo | rewind |
rQuadTo | addArc |
addCircle | addOval |
addRect | addRoundRect |
arcTo | cubicTo |
setLastPoint | rLineTo |
执行路径
- 函数
action.gesture(paths: Union[Path, List[Path]],listener=None)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
paths | [Path | List[Path]](#手指路径) | 是 |
listener | class | 否 | 手势回调对象, 函数需包含两个函数手势执行完毕回调:onCompleted() , 手势中断回调:onCancelled() |
#案例1:执行一组动作,分别模拟两个手指同时操作
from ascript.android import action
from ascript.android.action import Path
# 模拟第一根手指
line1 = Path(0,1000);
line1.moveTo(804,708)
line1.lineTo(827,1479)
action.gesture(line1)
多指操作
#案例1:执行一组动作,分别模拟两个手指同时操作
from ascript.android import action
from ascript.android.action import Path
# 模拟第一根手指
line1 = Path(0,1000)
line1.moveTo(804,708)
line1.lineTo(827,1479)
# 模拟第二根手指
line2 = Path(0,1200)
line2.moveTo(500,200)
line2.lineTo(500,500)
action.gesture([line1,line2])
#案例2,执行一组动作,分别模拟两个手指同时操作,并监听动作是否执行结束
from ascript.android import action
from ascript.android.action import Path
line1 = Path(0,1000)
line1.moveTo(200,200)
line1.lineTo(200,500)
# 创建另一个新的path路径 模拟 手指2(*第二条路径相对于第一条,会延迟500ms启动)
line2 = Path(500,1200)
line2.moveTo(500,200)
line2.lineTo(500,500)
class listener:
def onCompleted():
print("结束了")
def onCancelled():
print("被中断取消了")
# 执行 这一组动作
action.gesture([line1,line2],listener)
#案例3:连续 执行两个Path路径,中途不松手指
#案例3:连续 执行两个Path路径,中途不松手指
from ascript.android import action
from ascript.android.action import Path
line1 = Path(0,1000,True);
line1.moveTo(288,731)
line1.lineTo(644,739)
# 创建另一个新的path路径 模拟 手指2
line2 = Path(0,500)
line2.moveTo(644,739)
line2.lineTo(625,1323)
class listener:
def onCompleted():
print("执行完毕了")
action.gesture(line2)
def onCancelled():
print("被中断取消了")
action.gesture([line1],listener)
捕获点击
捕获用户点击屏幕的坐标
- 函数
action.catch_click(msg: str = None, shine: bool = True):
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
msg | str | 否 | 捕获屏幕坐标时,要显示的文字.默认无文字显示 |
shine | bool | 否 | 是否闪烁屏幕提示用户. 默认闪烁,False为不闪烁 |
- 返回值
返回用户点击的屏幕坐标位置.
Point 对象. 包含 x,y 属性.分别代表横竖坐标值
- 示例
# 捕获用户点击屏幕的坐标
from ascript.android import action
p = action.catch_click()
print(p)
# 捕获用户点击屏幕的坐标,给出提示文字,并取消屏幕闪烁
from ascript.android import action
p = action.catch_click("请点击屏幕任意位置",False)
print(p)