Android 浮动窗口穿透触摸实现 - 代码详解
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 系统版本不同,代码可能会存在兼容性问题,请根据实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/onCR 著作权归作者所有。请勿转载和采集!