 | |  |  | AIWROK双指向中间滑动捏合手势完整示例
- /**
- * ============================================================
- * AIWROK - 双指向中间滑动(捏合手势)完整示例
- * ============================================================
- * 核心功能:
- * 1. auto.dispatchGesture([path1, path2]) —— 同时执行多条路径,实现多点触控
- * 2. new path() + setDurTime() + addPoint() —— 构建单根手指的滑动轨迹
- *
- * 手势说明:
- * - 捏合(缩小):左指向右滑 + 右指向左滑,两指同时向中间靠拢
- * - 放大(张开):左指向左滑 + 右指向右滑,两指同时向外分开(附带示例)
- * ============================================================
- */
- function main() {
- print.log("========== 双指向中间滑动(捏合手势)示例 ==========");
- // =====================================================
- // 第一步:获取屏幕尺寸,使用百分比坐标适配所有机型
- // =====================================================
- var screenW = 1080;
- var screenH = 1920;
- try {
- if (typeof screen !== 'undefined') {
- if (typeof screen.getScreenWidth === 'function') screenW = screen.getScreenWidth();
- if (typeof screen.getScreenHeight === 'function') screenH = screen.getScreenHeight();
- } else if (typeof device !== 'undefined') {
- if (typeof device.width === 'number') screenW = device.width;
- if (typeof device.height === 'number') screenH = device.height;
- }
- } catch (e) {
- print.log("获取屏幕尺寸失败,使用默认值: " + e);
- }
- print.log("屏幕尺寸: " + screenW + " x " + screenH);
- sleep.millisecond(500);
- // =====================================================
- // 示例 1:水平方向双指捏合(向中间滑动,缩小图片用)
- // 左指:屏幕左侧 1/4 处 → 屏幕中间
- // 右指:屏幕右侧 3/4 处 → 屏幕中间
- // =====================================================
- print.log("\n--- 示例1: 水平捏合(向中间滑动,缩小)---");
- {
- // 左指路径:从左 1/4 → 中间
- var pathLeft1 = new path();
- pathLeft1.setDurTime(600);
- pathLeft1.addPoint(screenW * 0.25, screenH * 0.5); // 起点
- pathLeft1.addPoint(screenW * 0.45, screenH * 0.5); // 终点(中间偏左)
- // 右指路径:从右 1/4 → 中间
- var pathRight1 = new path();
- pathRight1.setDurTime(600);
- pathRight1.addPoint(screenW * 0.75, screenH * 0.5); // 起点
- pathRight1.addPoint(screenW * 0.55, screenH * 0.5); // 终点(中间偏右)
- // 同时传入两个 path 对象 → 双指同时滑动
- var ok1 = auto.dispatchGesture([pathLeft1, pathRight1]);
- print.log(ok1 ? "✓ 水平捏合执行成功" : "✗ 水平捏合执行失败");
- }
- sleep.second(1);
- // =====================================================
- // 示例 2:垂直方向双指捏合(上指下滑 + 下指上滑 → 向中间)
- // =====================================================
- print.log("\n--- 示例2: 垂直捏合(向中间滑动)---");
- {
- var pathTop = new path();
- pathTop.setDurTime(600);
- pathTop.addPoint(screenW * 0.5, screenH * 0.25); // 顶部起点
- pathTop.addPoint(screenW * 0.5, screenH * 0.45); // 向中间滑
- var pathBottom = new path();
- pathBottom.setDurTime(600);
- pathBottom.addPoint(screenW * 0.5, screenH * 0.75); // 底部起点
- pathBottom.addPoint(screenW * 0.5, screenH * 0.55); // 向中间滑
- var ok2 = auto.dispatchGesture([pathTop, pathBottom]);
- print.log(ok2 ? "✓ 垂直捏合执行成功" : "✗ 垂直捏合执行失败");
- }
- sleep.second(1);
- // =====================================================
- // 示例 3:对角线捏合(左上+右下同时向中心靠拢)
- // =====================================================
- print.log("\n--- 示例3: 对角线捏合(左上+右下 → 中心)---");
- {
- var pathLT = new path();
- pathLT.setDurTime(700);
- pathLT.addPoint(screenW * 0.15, screenH * 0.2); // 左上角
- pathLT.addPoint(screenW * 0.42, screenH * 0.46); // 中心左上区域
- var pathRB = new path();
- pathRB.setDurTime(700);
- pathRB.addPoint(screenW * 0.85, screenH * 0.8); // 右下角
- pathRB.addPoint(screenW * 0.58, screenH * 0.54); // 中心右下区域
- var ok3 = auto.dispatchGesture([pathLT, pathRB]);
- print.log(ok3 ? "✓ 对角线捏合执行成功" : "✗ 对角线捏合执行失败");
- }
- sleep.second(1);
- // =====================================================
- // 示例 4:放大手势(与捏合相反,双指向外分开)
- // 作为对比参考,方便理解方向
- // =====================================================
- print.log("\n--- 示例4: 水平放大(双指向外分开)---");
- {
- var pathLeft4 = new path();
- pathLeft4.setDurTime(600);
- pathLeft4.addPoint(screenW * 0.45, screenH * 0.5); // 中间偏左
- pathLeft4.addPoint(screenW * 0.20, screenH * 0.5); // 滑向左边
- var pathRight4 = new path();
- pathRight4.setDurTime(600);
- pathRight4.addPoint(screenW * 0.55, screenH * 0.5); // 中间偏右
- pathRight4.addPoint(screenW * 0.80, screenH * 0.5); // 滑向右边
- var ok4 = auto.dispatchGesture([pathLeft4, pathRight4]);
- print.log(ok4 ? "✓ 水平放大执行成功" : "✗ 水平放大执行失败");
- }
- sleep.second(1);
- // =====================================================
- // 示例 5:封装好的通用函数调用
- // =====================================================
- print.log("\n--- 示例5: 调用封装函数 pinchHorizontal() ---");
- pinchHorizontal(0.2, 0.8, 0.5, 0.5, 800); // 从 20% 和 80% 位置向中间捏合
- sleep.second(1);
- print.log("\n========== 示例全部执行完成 ==========");
- }
- // ============================================================
- // 封装函数:水平捏合(双指向中间滑动)
- // 参数:
- // leftStartXPercent : 左指起点 X 的百分比 (0~1)
- // rightStartXPercent: 右指起点 X 的百分比 (0~1)
- // yPercent : 捏合中心线的 Y 百分比 (0~1)
- // convergePercent : 向中间收敛到的位置(0.5 = 正中心)
- // duration : 持续时间(毫秒)
- // ============================================================
- function pinchHorizontal(leftStartXPercent, rightStartXPercent, yPercent, convergePercent, duration) {
- try {
- var w = 1080, h = 1920;
- if (typeof screen !== 'undefined') {
- if (typeof screen.getScreenWidth === 'function') w = screen.getScreenWidth();
- if (typeof screen.getScreenHeight === 'function') h = screen.getScreenHeight();
- }
- var y = h * yPercent;
- var cx = w * convergePercent;
- // 左指:起点 → 中心左侧(留出一点间距不撞车)
- var pL = new path();
- pL.setDurTime(duration);
- pL.addPoint(w * leftStartXPercent, y);
- pL.addPoint(cx - w * 0.05, y);
- // 右指:起点 → 中心右侧
- var pR = new path();
- pR.setDurTime(duration);
- pR.addPoint(w * rightStartXPercent, y);
- pR.addPoint(cx + w * 0.05, y);
- var result = auto.dispatchGesture([pL, pR]);
- print.log("水平捏合 " + (result ? "成功" : "失败")
- + " [" + (leftStartXPercent*100).toFixed(0) + "%→" + ((convergePercent-0.05)*100).toFixed(0) + "%"
- + ", " + (rightStartXPercent*100).toFixed(0) + "%→" + ((convergePercent+0.05)*100).toFixed(0) + "%]");
- return result;
- } catch (e) {
- print.log("水平捏合异常: " + e);
- return false;
- }
- }
- // ============================================================
- // 封装函数:垂直捏合(上指下滑 + 下指上滑)
- // ============================================================
- function pinchVertical(topStartYPercent, bottomStartYPercent, xPercent, convergePercent, duration) {
- try {
- var w = 1080, h = 1920;
- if (typeof screen !== 'undefined') {
- if (typeof screen.getScreenWidth === 'function') w = screen.getScreenWidth();
- if (typeof screen.getScreenHeight === 'function') h = screen.getScreenHeight();
- }
- var x = w * xPercent;
- var cy = h * convergePercent;
- var pT = new path();
- pT.setDurTime(duration);
- pT.addPoint(x, h * topStartYPercent);
- pT.addPoint(x, cy - h * 0.05);
- var pB = new path();
- pB.setDurTime(duration);
- pB.addPoint(x, h * bottomStartYPercent);
- pB.addPoint(x, cy + h * 0.05);
- var result = auto.dispatchGesture([pT, pB]);
- print.log("垂直捏合 " + (result ? "成功" : "失败"));
- return result;
- } catch (e) {
- print.log("垂直捏合异常: " + e);
- return false;
- }
- }
- // ============================================================
- // 封装函数:通用双指捏合(任意起点 + 指定收敛中心)
- // start1 : 起点1 {x, y} (百分比 0~1)
- // start2 : 起点2 {x, y}
- // center : 收敛中心 {x, y} (百分比)
- // duration : 毫秒
- // ============================================================
- function pinchGeneric(start1, start2, center, duration) {
- try {
- var w = 1080, h = 1920;
- if (typeof screen !== 'undefined') {
- if (typeof screen.getScreenWidth === 'function') w = screen.getScreenWidth();
- if (typeof screen.getScreenHeight === 'function') h = screen.getScreenHeight();
- }
- var p1 = new path();
- p1.setDurTime(duration);
- p1.addPoint(start1.x * w, start1.y * h);
- // 向中心靠近,但不到绝对中心(留 3% 间距,避免两指坐标相同被系统识别成单指)
- p1.addPoint(
- start1.x * w + (center.x * w - start1.x * w) * 0.85,
- start1.y * h + (center.y * h - start1.y * h) * 0.85
- );
- var p2 = new path();
- p2.setDurTime(duration);
- p2.addPoint(start2.x * w, start2.y * h);
- p2.addPoint(
- start2.x * w + (center.x * w - start2.x * w) * 0.85,
- start2.y * h + (center.y * h - start2.y * h) * 0.85
- );
- var result = auto.dispatchGesture([p1, p2]);
- print.log("通用双指捏合 " + (result ? "成功" : "失败"));
- return result;
- } catch (e) {
- print.log("通用捏合异常: " + e);
- return false;
- }
- }
- main();
复制代码
| |  | |  |
|