$draw - 全屏绘制

  • 更新时间:2025-12-13 11:58:44

全屏绘制

系统限制

在全局绘制框架中,绝大多数情况都会使用到全屏悬浮窗,但是这种方式在部分手机上用户手势会被拦截,这一类现象被称为"卡悬浮"。

//这种悬浮窗是小型的,因此不会阻碍到用户手势(无论在任何系统中都适用)
$draw.i("信息");
$draw.d("调试");
$draw.w("警告");

经过测试,在MIUI系列的手机中,手机厂家会拦截悬浮窗手势,无论用何种悬浮窗类型,都无效,这是厂家在系统中刻下的基因。

//这种悬浮窗是全屏的,对于MIUI的手机(小米红米之类的)会导致拦截用户手势而无法操作界面
$draw.i("信息",100,100);
$draw.d("调试",100,100);
$draw.w("警告",100,100);
$draw.rect(100,100,200,200); //绘制方框
$draw.line(100,100,200,200); //绘制线条

全屏绘制类的函数:例如:绘制线、文本、方框等,在ColorOS下(或者大多数国产安卓模拟器),系统会提示是否允许显示在上层(安卓模拟器大多数默认允许),经过用户允许之后就可以正常绘制并且不阻碍用户使用手机, 但是在MIUI系统中,没有任何提示,经调试发现该类系统会直接拦截所有用户手势,据了解是为了安全才如此设计。

作为开发者,你必须谨慎使用全局绘制,并不是所有手机都开放了全屏悬浮窗时的触摸事件。

TIP

在1.8.0版本后,支持在root或者shizuku授权下,会自动尝试解锁卡悬浮,允许悬浮窗的触摸事件到达底层。

获取权限()

获取悬浮窗权限

  • 返回 : {布尔值} 是否有权限

  • 版本 : 1.6.8

$绘制.获取权限();

方框(矩形)

绘制一个方框

  • 参数 : 矩形 {Rect} opencv的Rect对象

  • 版本 : 1.6.8

//绘制矩形
定义 矩形 = new org.opencv.core.Rect(0,0,100,100);
$绘制.方框(矩形);

方框(节点)

绘制一个方框

  • 参数 : 节点 {Node} 节点信息

  • 版本 : 1.6.8

//绘制矩形
$绘制.方框(node);

方框(x, y, 宽, 高)

绘制一个方框

  • 参数 : x {int} 起点x

  • 参数 : y {int} 起点y

  • 参数 : 宽 {int} 宽度

  • 参数 : 高 {int} 高度

  • 版本 : 1.6.8

//绘制矩形
$绘制.方框(200,200,200,100);

方框(x, y, 宽, 高, 颜色)

绘制一个方框

  • 参数 : x {int} 起点x

  • 参数 : y {int} 起点y

  • 参数 : 宽 {int} 宽度

  • 参数 : 高 {int} 高度

  • 参数 : 颜色 {字符串} 颜色

  • 版本 : 1.6.8

//绘制矩形
$绘制.方框(200,200,200,100,"#FF0000");

方框(x, y, 宽, 高, 拓展宽度)

绘制方框

  • 参数 : x {int} 起点x

  • 参数 : y {int} 起点y

  • 参数 : 宽 {int} 宽度

  • 参数 : 高 {int} 高度

  • 参数 : 拓展宽度 {int} 向四周拓展

  • 版本 : 1.6.8

//绘制一个向外拓展50像素的矩阵
$绘制.方框(200,200,200,100,50);

方框(x, y, 宽, 高, 拓展宽度, 颜色)

绘制方框

  • 参数 : x {int} 起点x

  • 参数 : y {int} 起点y

  • 参数 : 宽 {int} 宽度

  • 参数 : 高 {int} 高度

  • 参数 : 拓展宽度 {int} 向四周拓展

  • 参数 : 颜色 {字符串} 颜色

  • 版本 : 1.6.8

//绘制一个向外拓展50像素的矩阵
$绘制.方框(200,200,200,100,50,"#FF0000");

方框(x, y, 宽, 高, 拓展宽度, 颜色)

绘制方框

  • 参数 : x {int} 起点x

  • 参数 : y {int} 起点y

  • 参数 : 宽 {int} 宽度

  • 参数 : 高 {int} 高度

  • 参数 : 拓展宽度 {int} 向四周拓展

  • 参数 : 颜色 {int} 颜色

  • 版本 : 1.6.8

//绘制一个向外拓展50像素的矩阵
$绘制.方框(200,200,200,100,50,$颜色.红色);

方框(数组, 拓展宽度, 颜色)

绘制方框

  • 参数 : 数组 {数字[]} 范围数组

  • 参数 : 拓展宽度 {数字} 向四周拓展

  • 参数 : 颜色 {数字} 颜色

  • 版本 : 1.8.2

//绘制一个向外拓展50像素的矩阵
$绘制.方框([200,200,200,100],50,$颜色.红色);

方框(数组, 拓展宽度, 颜色)

绘制方框

  • 参数 : 数组 {数字[]} 范围数组

  • 参数 : 拓展宽度 {数字} 向四周拓展

  • 参数 : 颜色 {字符串} 颜色

  • 版本 : 1.8.2

//绘制一个向外拓展50像素的矩阵
$绘制.方框([200,200,200,100],50,"#FF0000");

准心(位置)

绘制一个十字准心

  • 参数 : 位置 {point} opencv的位置

  • 版本 : 1.6.8

定义 位置 = new org.opencv.core.Point(100,100);
//绘制准心
$绘制.准心(位置);

准心(位置)

绘制一个十字准心

  • 参数 : 位置 {int[]} 位置

  • 版本 : 1.6.8

//绘制准心
$绘制.准心([400,500]);

准心(节点)

绘制一个十字准心

  • 参数 : 节点 {AccessibilityNodeInfo} 节点信息

  • 版本 : 1.6.8

//绘制准心
$绘制.准心(原生节点对象);

准心(节点)

绘制一个十字准心

  • 参数 : 节点 {Node} 节点信息

  • 版本 : 1.6.8

//绘制准心
$绘制.准心(封装节点对象);

准心(x, y)

绘制一个十字准心

  • 参数 : x {int} 中心x

  • 参数 : y {int} 中心y

  • 版本 : 1.6.8

//绘制准心
$绘制.准心(400,500);

准心(x, y, 颜色)

绘制一个十字准心

  • 参数 : x {int} 中心x

  • 参数 : y {int} 中心y

  • 参数 : 颜色 {字符串} 颜色

  • 版本 : 1.6.8

//绘制准心
$绘制.准心(400,500,"#FF0000");

准心(x, y, 颜色)

绘制一个十字准心

  • 参数 : x {int} 中心x

  • 参数 : y {int} 中心y

  • 参数 : 颜色 {int} 颜色值

  • 版本 : 1.6.8

//绘制准心
$绘制.准心(400,500,$颜色.红色);

点(位置)

绘制一个点

  • 参数 : 位置 {int[]} 点

  • 版本 : 1.6.8

$绘制.([400,500]);

点(位置)

绘制一个点

  • 参数 : 位置 {point} 点

  • 版本 : 1.6.8

$绘制.(point);

点(x, y)

绘制一个点

  • 参数 : x {int} 点x

  • 参数 : y {int} 点y

  • 版本 : 1.6.8

//绘制一个点
$绘制.(400,500);

点(x, y, 颜色)

绘制一个点

  • 参数 : x {int} 点x

  • 参数 : y {int} 点y

  • 参数 : 颜色 {字符串} 颜色

  • 版本 : 1.6.8

//绘制一个点
$绘制.(400,500);

点(x, y, 颜色)

绘制一个点

  • 参数 : x {int} 点x

  • 参数 : y {int} 点y

  • 参数 : 颜色 {int} 颜色值

  • 版本 : 1.6.8

//绘制一个点
$绘制.(400,500,$颜色.红色);

文字(文本, x, y)

绘制文字

  • 参数 : 文本 {String} 文字

  • 参数 : x {int} 起点x

  • 参数 : y {int} 起点y

  • 版本 : 1.6.8

//绘制文字(默认字体大小:15dp)
$绘制.文字("Hello aigame !",400,300);

文字(文字, x, y, 字体大小)

绘制文字

  • 参数 : 文字 {String} 文字

  • 参数 : x {int} 起点x

  • 参数 : y {int} 起点y

  • 参数 : 字体大小 {float} 字体大小

  • 版本 : 1.6.8

//绘制文字(大小为16dp)
$绘制.文字("Hello aigame !",400,400,16);

文字(文字, x, y, 字体大小, 颜色)

绘制文字

  • 参数 : 文字 {字符串} 文字

  • 参数 : x {int} 起点x

  • 参数 : y {int} 起点y

  • 参数 : 字体大小 {int} 字体大小

  • 参数 : 颜色 {字符串} 颜色

  • 版本 : 1.6.8

//绘制文字(大小为16dp)
$绘制.文字("Hello aigame !",400,400,16,"#FF0000");

文字(文字, x, y, 字体大小, 颜色)

绘制文字

  • 参数 : 文字 {String} 文字

  • 参数 : x {int} 起点x

  • 参数 : y {int} 起点y

  • 参数 : 字体大小 {int} 字体大小

  • 参数 : 颜色 {int} 颜色值

  • 版本 : 1.6.8

//绘制文字(大小为16dp)
$绘制.文字("Hello aigame !",400,400,16,$颜色.红色);

圆(x, y)

绘制一个圆形

半径默认为50像素

  • 参数 : x {int} 圆心x

  • 参数 : y {int} 圆心y

  • 版本 : 1.6.8

//绘制半径为50像素的圆形
$绘制.(350,400);

圆(x, y, 半径)

绘制一个圆形

  • 参数 : x {int} 圆心x

  • 参数 : y {int} 圆心y

  • 参数 : 半径 {int} 圆形半径

  • 版本 : 1.6.8

//绘制半径为100像素的圆形
$绘制.(350,400,100);

圆(x, y, 半径, 拓展宽度)

绘制一个圆形

  • 参数 : x {int} 圆心x

  • 参数 : y {int} 圆心y

  • 参数 : 半径 {int} 圆形半径

  • 参数 : 拓展宽度 {int} 圆形向四周拓展

  • 版本 : 1.6.8

//向外拓展50像素
$绘制.(350,400,100,50);

圆(x, y, r, 拓展宽度, 颜色)

绘制一个圆形

  • 参数 : x {int} 圆心x

  • 参数 : y {int} 圆心y

  • 参数 : r {int} 圆形半径

  • 参数 : 拓展宽度 {int} 圆形向四周拓展

  • 参数 : 颜色 {字符串} 颜色

  • 版本 : 1.6.8

//向外拓展50像素
$绘制.(350,400,100,50,"#FF0000");

圆(x, y, 半径, 拓展宽度, 颜色值)

绘制一个圆形

  • 参数 : x {int} 圆心x

  • 参数 : y {int} 圆心y

  • 参数 : 半径 {int} 圆形半径

  • 参数 : 拓展宽度 {int} 圆形向四周拓展

  • 参数 : 颜色值 {int} 颜色值

  • 版本 : 1.1.1

//向外拓展50像素
$绘制.(350,400,100,50,$颜色.红色);

图片(图片, x, y, 宽, 高)

绘制图片

  • 参数 : 图片 {Image} 图片对象

  • 参数 : x {int} 起点x

  • 参数 : y {int} 起点y

  • 参数 : 宽 {int} 宽度(绘制后的图片宽度)

  • 参数 : 高 {int} 高度(绘制后的图片宽度)

  • 版本 : 1.6.8

定义 图片 = $图片.读取("小猫.png");
//绘制图片
$绘制.图片(图片,200,200,100,150);

直线(起点x, 起点y, 目标x, 目标y)

绘制一条线

  • 参数 : 起点x {int} 起点x

  • 参数 : 起点y {int} 起点y

  • 参数 : 目标x {int} 目标x

  • 参数 : 目标y {int} 目标y

  • 版本 : 1.6.8

//绘制一条线
$绘制.直线(300,0,100,1000);

直线(起点x, 起点y, 目标x, 目标y, 颜色)

绘制一条线

  • 参数 : 起点x {int} 起点x

  • 参数 : 起点y {int} 起点y

  • 参数 : 目标x {int} 目标x

  • 参数 : 目标y {int} 目标y

  • 参数 : 颜色 {字符串} 颜色

  • 版本 : 1.6.8

//绘制一条线
$绘制.直线(300,0,100,1000,"#FF0000");

直线(起点x, 起点y, 目标x, 目标y, 颜色)

绘制一条线

  • 参数 : 起点x {int} 起点x

  • 参数 : 起点y {int} 起点y

  • 参数 : 目标x {int} 目标x

  • 参数 : 目标y {int} 目标y

  • 参数 : 颜色 {int} 颜色值

  • 版本 : 1.6.8

//绘制一条线
$绘制.直线(300,0,100,1000,$颜色.红色);

路径(路径数据)

绘制路径,传入的就是x和y的数组

  • 参数 : 路径数据 {int[][]} 二维数组,第二维数组是坐标

  • 版本 : 1.6.8

//国际通用手势
$绘制.路径([
    [100, 800],
    [120, 750],
    [150, 720],
    [180, 750],
    [200, 800],
    [200, 800],
    [220, 700],
    [250, 680],
    [280, 700],
    [300, 800],
    [300, 800],
    [320, 250],
    [350, 200],
    [380, 250],
    [400, 800],
    [400, 800],
    [420, 740],
    [450, 730],
    [480, 740],
    [500, 800],
    [500, 800],
    [520, 770],
    [550, 760],
    [580, 770],
    [600, 800]
]);

路径(路径数据, 颜色)

绘制路径,传入的就是x和y的数组

  • 参数 : 路径数据 {int[][]} 二维数组,第二维数组是坐标

  • 参数 : 颜色 {字符串} 颜色

  • 版本 : 1.6.8

//国际通用手势
$绘制.路径([
    [100, 800],
    [120, 750],
    [150, 720],
    [180, 750],
    [200, 800],
    [200, 800],
    [220, 700],
    [250, 680],
    [280, 700],
    [300, 800],
    [300, 800],
    [320, 250],
    [350, 200],
    [380, 250],
    [400, 800],
    [400, 800],
    [420, 740],
    [450, 730],
    [480, 740],
    [500, 800],
    [500, 800],
    [520, 770],
    [550, 760],
    [580, 770],
    [600, 800]
],"#FF0000");

路径(路径数据, 颜色值)

绘制路径,传入的就是x和y的数组

  • 参数 : 路径数据 {int[][]} 二维数组,第二维数组是坐标

  • 参数 : 颜色值 {int} 颜色值

  • 版本 : 1.6.8

//国际通用手势
$绘制.路径([
    [100, 800],
    [120, 750],
    [150, 720],
    [180, 750],
    [200, 800],
    [200, 800],
    [220, 700],
    [250, 680],
    [280, 700],
    [300, 800],
    [300, 800],
    [320, 250],
    [350, 200],
    [380, 250],
    [400, 800],
    [400, 800],
    [420, 740],
    [450, 730],
    [480, 740],
    [500, 800],
    [500, 800],
    [520, 770],
    [550, 760],
    [580, 770],
    [600, 800]
],$颜色.红色);

信息(文本, x, y, 字体大小)

绘制日志文字

  • 参数 : 文本 {字符串} 文字

  • 参数 : x {小数} 字体大小

  • 版本 : 1.6.8

$绘制.信息("信息",400,300,40);

信息(文字, x, y)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 版本 : 1.0.0

$绘制.信息("信息",400,300);

信息(文字)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 版本 : 1.6.8

$绘制.信息("信息");

调试(文字, x, y, 字体大小)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 参数 : x {小数} 字体大小

  • 版本 : 1.6.8

$绘制.调试("调试",400,300,40);

调试(文字, x, y)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 版本 : 1.6.8

$绘制.调试("调试",400,300);

调试(文字)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 版本 : 1.6.8

$绘制.调试("调试");

警告(文字, x, y, 字体大小)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 参数 : x {小数} 字体大小

  • 版本 : 1.6.8

$绘制.警告("警告",400,300,40);

警告(文字, x, y)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 版本 : 1.6.8

$绘制.警告("警告",400,300);

警告(文字)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 版本 : 1.6.8

$绘制.警告("警告");

异常(文字, x, y, 字体大小)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 参数 : x {小数} 字体大小

  • 版本 : 1.6.8

$绘制.异常("错误",400,300,40);

异常(文字, x, y)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 版本 : 1.6.8

$绘制.异常("错误",400,300);

异常(文字)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 版本 : 1.6.8

$绘制.异常("错误");

忽略(文字, x, y, 字体大小)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 参数 : x {小数} 字体大小

  • 版本 : 1.6.8

$绘制.忽略("信息",400,300,40);

忽略(文字, x, y)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 版本 : 1.6.8

$绘制.忽略("信息",400,300);

忽略(文字)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 版本 : 1.6.8

$绘制.忽略("信息");

日志(文字, 颜色, x, y, 字体大小)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 参数 : 颜色 {字符串} 颜色

  • 参数 : x {int} 位置x

  • 参数 : y {int} 位置y

  • 参数 : 字体大小 {float} 字体大小

  • 版本 : 1.6.8

//字体大小单位:dp
$绘制.日志("信息","#57965C",400,300,20);

日志(文字, 颜色, x, y)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 参数 : 颜色 {字符串} 颜色

  • 参数 : x {int} 位置x

  • 参数 : y {int} 位置y

  • 版本 : 1.6.8

$绘制.日志("信息","#57965C",400,300);

日志(文字, 颜色)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 参数 : 颜色 {字符串} 颜色

  • 版本 : 1.6.8

$绘制.日志("信息","#57965C");

日志(文字)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 版本 : 1.6.8

$绘制.日志("信息");

日志(文字, x, y)

绘制日志文字

  • 参数 : 文字 {字符串} 文字

  • 参数 : x {int} 位置x

  • 参数 : y {int} 位置y

  • 版本 : 1.6.8

$绘制.日志("信息",400,300);

关闭全部()

关闭绘制日志的悬浮窗

  • 版本 : 1.6.8

//关闭所有绘制图案
$绘制.关闭全部();

关闭全部(延迟)

关闭绘制日志的悬浮窗

  • 参数 : 延迟 {长整数} 延迟关闭时间

  • 版本 : 1.6.8

$绘制.关闭全部(1000);

关闭日志(延迟)

关闭绘制日志的悬浮窗

  • 参数 : 延迟 {长整数} 延迟关闭时间

  • 版本 : 1.6.8

$绘制.关闭日志(1000);

关闭日志()

关闭绘制日志的悬浮窗

  • 版本 : 1.6.8

$绘制.关闭日志();

清空()

清空所有绘制

清空绘制本质上也是绘制的一种,因此它和其他绘制函数一样,会优先判断当前悬浮窗是否开启, 如果悬浮窗没有开启,则创建一个全局悬浮窗至于屏幕最上层,之后绘制透明颜色以达到清空的效果。

如果你已经绘制过图案了,那么此时是存在顶层悬浮窗的,调用次函数的时候会直接绘制透明颜色以达到清空的效果。

如果你不理解什么是绘制透明颜色,可以理解为:画布中的橡皮擦(本质上是把橡皮经过的位置绘制成透明颜色)

  • 版本 : 1.6.8

//清空全局绘制
$绘制.清空();
ON THIS PAGE