Skip to main content

基本操作

from ascript.android import action

模拟 手指 操作

点击

模拟 手指点击屏幕

  • 函数
action.click(x:int,y:int,dur:int = 20):
  • 参数
参数类型是否必填说明
xint要点击的屏幕X坐标
yint要点击的屏幕Y坐标
durfloat点击持续时间,默认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)
  • 参数
参数类型是否必填说明
xint滑动起始点X坐标
yint滑动起始点Y坐标
x1int滑动结束点X坐标
y1int滑动结束点Y坐标
durfloat滑动持续时间,默认20毫秒
interpolatorjava Interpolator默认None,差速器. 可以实现各种加减速滑动效果
control_points=Nonelist或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
  • 效果: 预期超出插值。结合了 AnticipateInterpolatorOvershootInterpolator 的效果。动画先向后退,然后向前冲过目标值,最后回弹到目标值。
  • 参数:
    • 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)
  • 参数
参数类型是否必填说明
msgstr输入的内容
selectorSelector控件检索规则 当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)
  • 参数
参数类型是否必填说明
xint触摸X点坐标
yint触摸Y点坐标
durfloat动作持续时间,默认20毫秒

移动

模拟 手指移动

action.Touch.move(x, y, dur: int = 20)
  • 参数
参数类型是否必填说明
xint触摸X点坐标
yint触摸Y点坐标
durfloat动作持续时间,默认20毫秒

抬起

模拟 手指抬起

action.Touch.up(x, y, dur: int = 20)
  • 参数
参数类型是否必填说明
xint触摸X点坐标
yint触摸Y点坐标
durfloat动作持续时间,默认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_timeint延迟执行时间
durationint路径执行时常
will_continuebool执行完毕后,是否抬起手指 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

支持的绘制方法如下
moveTorCubicTo
lineTorMoveTo
quadToreset
rCubicTorewind
rQuadToaddArc
addCircleaddOval
addRectaddRoundRect
arcTocubicTo
setLastPointrLineTo

执行路径

  • 函数
action.gesture(paths: Union[Path, List[Path]],listener=None)
  • 参数
参数类型是否必填说明
paths[PathList[Path]](#手指路径)
listenerclass手势回调对象, 函数需包含两个函数
手势执行完毕回调: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):
  • 参数
参数类型是否必填说明
msgstr捕获屏幕坐标时,要显示的文字.默认无文字显示
shinebool是否闪烁屏幕提示用户. 默认闪烁,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)