牙叔教程 简单易懂
使用场景
想让悬浮窗可以调整大小, 位置, 又想设置悬浮窗是否可触摸
autojs版本
8.8.12-0
悬浮窗简介
autojs悬浮窗有两种
- FloatyWindow: 可以调整位置, 大小
- floaty.rawWindow: 可以设置是否可以触摸
有的人吧, 就想合二为一, 鱼和熊掌都想要, 就研究研究, 也是百度了上百个帖子, 才研究出来, 写个教程费劲哪,
懂的东西太少了, 不懂的东西太多了
代码讲解
1. 导入类
importClass(android.view.WindowManager); importClass("android.view.Gravity"); importClass("android.graphics.PixelFormat");
2. 布局
var w = floaty.window( <frame id="parent" gravity="center" bg="#f0f0f0"> <button id="btn" textSize="30sp"> 牙叔教程 简单易懂 </button> </frame> );
3. 设置按钮点击事件, 用于测试触摸功能
w.btn.click(function () { toastLog("牙叔教程 简单易懂"); });
4. 设置触摸属性
let parentParent = w.parent.parent.parent.parent; setTouchable(parentParent, true);
5. 设置大小等属性
w.setAdjustEnabled(true); w.setSize(600, 600); setInterval(function () {}, 1000);
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); }); }
7. 控制触摸属性的悬浮窗布局
// 由于触摸是针对整个悬浮窗的, 所以需要另外的悬浮窗来辅助修改悬浮窗的触摸属性, // 因为一旦悬浮窗设置了不可触摸, 就无法再控制了 var w2 = floaty.window( <frame id="parent" gravity="center" bg="#f0f0f0"> <button id="btn2" textSize="17sp"></button> </frame> );
8. 修改触摸属性, 最重要的代码
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);
声明
部分内容来自网络
本教程仅用于学习, 禁止用于其他用途