AutoJs6

- Overview - 综述
- About - 关于文档
- Progress - 文档部署进度
- Changelog - 文档更新日志

- Manual - AutoJs6 使用手册
- Q & A - 疑难解答

- Global - 全局对象
- Automator - 自动化
- AutoJs6 - 本体应用
- App - 通用应用
- Color - 颜色
- Image - 图像
- OCR - 光学字符识别
- Barcode - 条码
- QR Code - 二维码
- Keys - 按键
- Device - 设备
- Storage - 储存
- File - 文件
- Engine - 引擎
- Task - 任务
- Module - 模块
- Plugins - 插件
- Toast - 消息浮动框
- Notice - 消息通知
- Console - 控制台
- Shell
- Shizuku
- Media - 多媒体
- Sensor - 传感器
- Recorder - 记录器
- Timer - 定时器
- Thread - 线程
- Continuation - 协程
- Event - 事件监听
- Dialog - 对话框
- Floaty - 悬浮窗
- Canvas - 画布
- UI - 用户界面
- Web - 万维网
- HTTP
- Base64
- Crypto - 密文
- Internationalization - 国际化
- Standardization - 标准化
- E4X

- UiSelector - 选择器
- UiObject - 控件节点
- UiObjectCollection - 控件集合
- UiObjectActions - 控件节点行为
- WebSocket
- EventEmitter - 事件发射器
- ImageWrapper - 包装图像类
- App - 应用枚举类
- Color - 颜色类
- Version - 版本工具类
- Polyfill - 代码填泥
- Arrayx - Array 扩展
- Numberx - Number 扩展
- Mathx - Math 扩展

- Exceptions - 异常
- Intent - 意图
- Runtime - 运行时
- Context - 上下文
- Activity - 活动

- Scripting Java - 脚本化 Java
- Android API Level - 安卓 API 级别
- Color Table - 颜色列表

- Glossaries - 术语
- HttpHeader - HTTP 标头
- HttpRequestMethods - HTTP 请求方法
- MimeType - MIME 类型
- NotificationChannel - 通知渠道

- Data Types - 数据类型
- Omnipotent Types - 全能类型
- Storage - 存储类
- AndroidBundle
- AndroidRect
- CryptoCipherOptions
- CryptoKey
- CryptoKeyPair
- ConsoleBuildOptions
- HttpRequestBuilderOptions
- HttpRequestHeaders
- HttpResponseBody
- HttpResponseHeaders
- HttpResponse
- InjectableWebClient
- InjectableWebView
- NoticeOptions
- NoticeChannelOptions
- NoticePresetConfiguration
- NoticeBuilder
- Okhttp3HttpUrl
- OcrOptions
- Okhttp3Request
- OpencvPoint
- OpencvRect
- OpencvSize

- GitHub - 应用项目地址
- GitHub - 文档项目地址

# AndroidRect#

android.graphics.Rect 别名.

Rect 表示一个矩形, 作为控件信息时则用于表示控件在屏幕的相对位置及空间范围, 又称 控件矩形.

    let bounds = pickup(/.+/, 'bounds');
    console.log(`${bounds.centerX()}, ${bounds.centerY()}`);

常见相关方法或属性:

- UiObject#bounds
- UiSelector.pickup

> 注: 本章节仅列出部分属性或方法.

android.graphics.Rect

## [C] android.graphics.Rect#

### [c] (left, top, right, bottom)#

- left { number } - 矩形左边界 X 坐标
- top { number } - 矩形上边界 Y 坐标
- right { number } - 矩形右边界 X 坐标
- bottom { number } - 矩形下边界 Y 坐标
- returns { android.graphics.Rect }

生成一个矩形.

    let rect = new android.graphics.Rect(10, 20, 80, 90);
    console.log(rect); // Rect(10, 20 - 80, 90)

如果坐标值为浮点数, 将做向下取整处理:

    let rect = new android.graphics.Rect(10.2, 20.7, 80.1, 90.92);
    console.log(rect); // Rect(10, 20 - 80, 90)

坐标值可以为 0 或负数:

    let rect = new android.graphics.Rect(0, 0, -80, -90);
    console.log(rect); // Rect(0, 0 - -80, -90)

### [c] ()#

- returns { android.graphics.Rect }

生成一个空矩形.

    let rect = new android.graphics.Rect();
    console.log(rect); // Rect(0, 0 - 0, 0)

### [c] (rect)#

- rect { android.graphics.Rect } - 参照矩形
- returns { android.graphics.Rect }

生成一个新矩形, 并按照参照矩形的参数初始化.

    let rectA = new android.graphics.Rect(10, 20, 80, 90);
    let rectB = new android.graphics.Rect(rectA);
    console.log(rectB); // Rect(10, 20 - 80, 90)
    rectB.top = 1;
    rectB.bottom = 0;
    console.log(rectB); // Rect(10, 1 - 80, 0)
    console.log(rectA); // Rect(10, 20 - 80, 90)

## [p#] left#

- { number }

矩形左边界 X 坐标.

如: Rect(180, 440, 750, 1200) 表示矩形左边界距屏幕左边缘 180 像素.

## [p#] top#

- { number }

矩形上边界 Y 坐标.

如: Rect(180, 440, 750, 1200) 表示矩形上边界距屏幕上边缘 440 像素.

## [p#] right#

- { number }

矩形右边界 X 坐标.

如: Rect(180, 440, 750, 1200) 表示矩形右边界距屏幕左边缘 750 像素.

## [p#] bottom#

- { number }

矩形下边界 Y 坐标.

如: Rect(180, 440, 750, 1200) 表示矩形下边界距屏幕上边缘 1200 像素.

## [m#] width#

### width()#

- returns { number }

矩形宽度.

    let rect = new android.graphics.Rect(180, 440, 750, 1200);
    console.log(rect.width()); // 570

宽度可能为 0 或负数:

    let rectA = new android.graphics.Rect(0, 440, 0, 1200);
    console.log(rectA.width()); // 0
    let rectB = new android.graphics.Rect(30, 440, 10, 1200);
    console.log(rectB.width()); // -20

## [m#] height#

### height()#

- returns { number }

矩形高度.

    let rect = new android.graphics.Rect(180, 440, 750, 1200);
    console.log(rect.height()); // 760

高度可能为 0 或负数:

    let rectA = new android.graphics.Rect(180, 1200, 750, 1200);
    console.log(rectA.height()); // 0
    let rectB = new android.graphics.Rect(180, 40, 750, 10);
    console.log(rectB.height()); // -30

## [m#] centerX#

### centerX()#

- returns { number }

矩形中点 X 坐标 (向下取整).

    let rectA = new android.graphics.Rect(180, 440, 750, 1200);
    console.log(rectA.centerX()); // 465

    let rectB = new android.graphics.Rect(100, 200, 101, 201);
    console.log(rectB.centerX()); // 100

## [m#] centerY#

### centerY()#

- returns { number }

矩形中点 Y 坐标 (向下取整).

    let rectA = new android.graphics.Rect(180, 440, 750, 1200);
    console.log(rectA.centerY()); // 820

    let rectB = new android.graphics.Rect(100, 200, 101, 201);
    console.log(rectB.centerY()); // 200

## [m#] exactCenterX#

### exactCenterX()#

- returns { number }

矩形中点 X 坐标 (浮点数).

    let rectA = new android.graphics.Rect(180, 440, 750, 1200);
    console.log(rectA.exactCenterX()); // 465

    let rectB = new android.graphics.Rect(100, 200, 101, 201);
    console.log(rectB.exactCenterX()); // 100.5

## [m#] exactCenterY#

### exactCenterY()#

- returns { number }

矩形中点 Y 坐标 (浮点数).

    let rectA = new android.graphics.Rect(180, 440, 750, 1200);
    console.log(rectA.exactCenterY()); // 820

    let rectB = new android.graphics.Rect(100, 200, 101, 201);
    console.log(rectB.exactCenterY()); // 200.5

## [m#] contains#

### contains(rect)#

- rect { android.graphics.Rect } - 参照矩形
- returns { boolean }

返回是否包含另一个矩形.
参照矩形的所有边均在当前矩形内 (包含边重叠情况) 则满足包含条件.
空矩形与任何矩形不存在包含关系.

    let rectThis = new android.graphics.Rect(180, 440, 750, 1200);

    let rectRefA = new android.graphics.Rect(rectThis);
    console.log(rectThis.contains(rectRefA)); // true

    let rectRefB = new android.graphics.Rect(200, 440, 750, 1200);
    console.log(rectThis.contains(rectRefB)); // true

    let rectRefC = new android.graphics.Rect(); /* 空矩形. */
    console.log(rectThis.contains(rectRefC)); // false

## [m#] intersect#

### intersect(rect)#

- rect { android.graphics.Rect } - 参照矩形
- returns { boolean }

返回是否与参展矩形相交 (不包括边界或点重叠的情况).
如果相交, 则返回 true, 且当前矩形被设置为相交部分的矩形.

    let rectThis = new android.graphics.Rect(0, 0, 600, 600);
    let rectRef = new android.graphics.Rect(200, 0, 800, 800);

    console.log(rectThis.intersect(rectRef)); // true

    /* rectThis 被修改. */
    console.log(rectThis); // Rect(200, 0 - 600, 600)

如果不相交, 则返回 false, 当前矩形不会被修改:

    let rectThis = new android.graphics.Rect(0, 0, 100, 100);
    let rectRef = new android.graphics.Rect(100, 0, 800, 800);

    console.log(rectThis.intersect(rectRef)); // false

    /* rectThis 保持原来的值. */
    console.log(rectThis); // Rect(0, 0 - 100, 100)

空矩形与任意矩形不相交:

    let rectThis = new android.graphics.Rect(0, 0, 100, 100);
    let rectRef = new android.graphics.Rect();
    console.log(rectThis.intersect(rectRef)); // false

## [m] intersects#

### intersects(rectA, rectB)#

- rect { android.graphics.Rect } - 参照矩形
- returns { boolean }

返回是否和另一个长方形相交.

此方法近判断是否相交, 不改变任何矩形:

    let rectA = new android.graphics.Rect(0, 0, 600, 600);
    let rectB = new android.graphics.Rect(200, 0, 800, 800);

    console.log(android.graphics.Rect.intersects(rectA, rectB)); // true

    /* rectA 和 refB 均保持原来的值. */
    console.log(rectA); // Rect(0, 0 - 600, 600)
    console.log(rectB); // Rect(200, 0 - 800, 800)

需额外留意 intersects 与 intersect 的区别:

- `[m#] intersect` 为实例方法, `rectA.intersect(rectB)` 需传入一个参数, 当相交时 `rectA` 会被改变, 返回结果为 "是否相交".

- `[m] intersects` 为静态方法, `Rect.intersects(rectA, rectB)` 需传入两个参数, 且不改变任何矩形, 仅返回 "是否相交" 结果.