Android 浮动窗口穿透触摸实现 - 代码详解

本教程将详细讲解如何使用 Auto.js 实现 Android 浮动窗口穿透触摸功能,并提供代码示例和详细解释。

1. 定义屏幕宽度和高度变量

let screenWidth = $device.width;
let screenHeight = $device.height;

var x = 0, y = 0;

屏幕宽度和高度变量用于设置浮动窗口的大小。

2. 导入类

importClass(android.view.WindowManager);

importClass('android.view.Gravity');

importClass('android.graphics.PixelFormat');

导入需要使用的 Android 类。

3. 创建浮动窗口布局

var w = floaty.window(
    <frame id='parent' gravity='center' bg='#f0f0f0' alpha='0.5'  >
        <button id='btn' textSize='30sp'>
            穿透触摸测试
        </button>
    </frame>
);

使用 floaty 创建一个浮动窗口布局,并设置其子元素为一个按钮。

4. 设置触摸属性

let parentParent = w.parent.parent.parent.parent;

setTouchable(parentParent, true);

使用 setTouchable 函数设置浮动窗口的触摸属性,使其可以穿透触摸。

5. 设置浮动窗口大小等属性

// w.setAdjustEnabled(true);

w.setSize(screenHeight, screenWidth);

setInterval(function () { }, 1000);

设置浮动窗口的大小等属性,包括宽度、高度和 adjustEnabled 属性。

6. setTouchable 函数

function setTouchable(view, touchable) {
    let params = view.getLayoutParams();
    if (touchable) {
        params.flags &= ~WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
    } else {
        params.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
    }
    log(params.flags);
    windowManager = context.getSystemService(context.WINDOW_SERVICE);
    ui.run(function () {
        windowManager.updateViewLayout(view, params);
    });
}

let params = parentParent.getLayoutParams();

if (params.flags == 16777736) {
    log('当前可以触摸, 修改为不可触摸');
    params.flags |= WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
} else if (params.flags == 16777752) {
    log('当前不可以触摸, 修改为可触摸');
    params.flags &= ~WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
} else {
    throw new Error('params.flags 未知数: ' + params.flags);
}

windowManager = context.getSystemService(context.WINDOW_SERVICE);

windowManager.updateViewLayout(parentParent, params);

setTouchable 函数用于设置浮动窗口的触摸属性,接受两个参数,一个是浮动窗口的 view 对象,另一个是触摸属性 touchable。函数内部通过修改 view 对象的 layoutParams 的 flags 属性来设置触摸属性,并通过 updateViewLayout 函数更新浮动窗口的布局。

代码解析:

  • setTouchable 函数用于设置浮动窗口的触摸属性,接受两个参数,一个是浮动窗口的 view 对象,另一个是触摸属性 touchable。
  • 函数内部通过修改 view 对象的 layoutParams 的 flags 属性来设置触摸属性。
  • FLAG_NOT_TOUCHABLE 属性用于控制浮动窗口是否可以接收触摸事件。
  • 使用 &| 运算符来修改 flags 属性,以设置浮动窗口是否可以穿透触摸。
  • updateViewLayout 函数用于更新浮动窗口的布局。

总结:

本教程介绍了使用 Auto.js 实现 Android 浮动窗口穿透触摸功能的方法,并提供了详细的代码示例和解析。希望本教程能够帮助你更好地理解浮动窗口的触摸属性设置和相关 API 的使用方法。

注意事项:

  • 本教程中的代码示例仅供参考,实际使用时可能需要根据具体需求进行调整。
  • 为了确保代码安全性和稳定性,请务必在使用前进行测试和验证。
  • 由于 Android 系统版本不同,代码可能会存在兼容性问题,请根据实际情况进行调整。
Android 浮动窗口穿透触摸实现 - 代码详解

原文地址: https://www.cveoy.top/t/topic/onCR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录