/*
软件作者:https://xuhss.com/oxox/pro
*/
/*
* @Author: 大柒
* @QQ: 531310591@qq.com
* @Version: Auto.Js Pro
* @LastEditors: 大柒
* @Date: 2019-05-12 17:08:18
* @LastEditTime: 2019-05-13 18:00:12
* @Description:
* 第二版Aotu.JS悬浮窗
* 推荐使用Auto,JS Pro版本
* 不知到在哪里下载PRO版本的请加群 662377009
* 修复了上一版的BUG,优化了部分细节
* 当屏幕方向发生变化时,悬浮窗自动调整位置
* 修复快速双击主按钮,产生的错误
* 数据更加直观,常量值可修改全局变量不可修改
* 优化了停靠动画衔接,拖动按钮时更加流畅
* 菜单触发事件全部集中在 menuOnClick() 函数
* 自行添加响应功能
* 如果发现BUG请联系我
* QQ:531310591
*/
importClass(android.animation.ObjectAnimator)
importClass(android.animation.AnimatorSet)
importClass(android.view.animation.BounceInterpolator)
importClass(android.content.BroadcastReceiver);
importClass(android.content.ContextWrapper);
importClass(android.content.IntentFilter);
/**************可修改参数 */
//按钮大小
const but_w_h = 42;
//图标大小
const but_w = 30;
//按钮停靠时X值 增量 感觉按钮停靠两边太靠外面则减小该值
const port_x = 4;
//菜单展开圆的半径
const menu_r = 230
//菜单展开动画播放时间 可自行修改
const animation_time = 200
//按钮停靠动画播放时间 可自行修改
const animation_time_1 = 300
//menu菜单数据可自行修改
//添加方法在but_data里面先写好对应内容,然后在menu悬浮窗里面添加一个按钮布局并填写信息
//也可以不需要下面数据 直接在悬浮窗手动输入信息
const but_data = {
'logo': {
name: "logo",//不可修改
src: "https://pro.autojs.org/images/logo.png",
},
'menu_1': {
name: "菜单1",
src: "@drawable/ic_perm_identity_black_48dp",
bg: "#009687"
},
'menu_2': {
name: "菜单2",
src: "@drawable/ic_assignment_black_48dp",
bg: "#ee534f"
},
'menu_3': {
name: "菜单3",
src: "@drawable/ic_play_arrow_black_48dp",
bg: "#40a5f3"
},
'menu_4': {
name: "菜单4",
src: "@drawable/ic_clear_black_48dp",
bg: "#fbd834"
},
'menu_5': {
name: "设置",
src: "@drawable/ic_settings_black_48dp",
bg: "#bfc1c0"
}
}
/**
* menu菜单按钮被点击事件
* 可在这个函数内添加每个菜单要触发的功能
* @param {*} view //menu按钮视图信息
* view._bg : menu背景颜色
* view._name : menu name名
* view._img : menu src图片
*/
function menuOnClick(view) {
toastLog('点击了' + view._name.text());
switch (view._name.text()) {
case "菜单1":
break;
case "菜单2":
break;
case "菜单3":
break;
case "菜单4":
break;
case "设置":
let arr = ["打开无障碍服务", "当前应用包名:", "当前活动:", "打开主页面", "指针位置[Root]", "退出悬浮窗"]
if (auto.service != null) {
Pack = currentPackage();
Acti = currentActivity();
arr[1] += Pack;
arr[2] += Acti;
}
dialogs.build({
title: "设置",
buttonRippleColor: "#000000",
itemsSelectMode: "single",
items: arr,
}).on("single_choice", (index) => {
switch (index) {
case 0:
app.startActivity({ action: "android.settings.ACCESSIBILITY_SETTINGS" });
break;
case 1:
auto.service != null ? (setClip(Pack), toast("已复制到剪切板")) : toast("无障碍服务未启动")
break;
case 2:
auto.service != null ? (setClip(Acti), toast("已复制到剪切板")) : toast("无障碍服务未启动")
break;
case 3:
toast("自行添加");
break;
case 4:
toast("自行添加");
break;
case 5:
exit();
break;
}
}).show()
break;
}
animation_menu();
}
/**************以下为系统函数 */
//菜单展开状态记录值
var menu_switch = false;
//按钮左右方向记录值 false:左 true:右
var but_orientation = false;
//屏幕方向记录值 false:竖 true:横
var screen_rotation = false;
//动画播放开关记录值 防止动画播放冲突
var animation_state = false;
//菜单按钮视图信息
var menu_view = [];
//menu展开坐标
var menu_X = new Array(); menu_Y = new Array();
//屏幕宽高
var _w = device.width; _h = device.height;
//主按钮Y值所在屏幕百分比,屏幕旋转时调整控件位置
var _z = 0.5
//自定义控件 按钮
var butLogoLayout = (function () {
util.extend(butLogoLayout, ui.Widget);
function butLogoLayout() {
ui.Widget.call(this);
this.defineAttr("name", (view, attr, value, defineSetter) => {
view._name.setText(value)
})
this.defineAttr("src", (view, attr, value, defineSetter) => {
view._img.attr("src", value)
})
this.defineAttr("bg", (view, attr, value, defineSetter) => {
view._bg.attr("cardBackgroundColor", value)
view._img.attr("tint", "#ffffff")
menu_view[menu_view.length] = view;
})
};
butLogoLayout.prototype.render = function () {
return (
<card id="_bg" w="{{but_w_h}}" h="{{but_w_h}}" cardCornerRadius="{{but_w_h}}" cardBackgroundColor="#99ffffff"
cardElevation="0" foreground="?selectableItemBackground" gravity="center" >
<img id="_img" w="{{but_w}}" src="#ffffff" circle="true" />
<text id="_name" text="0" visibility="gone" textSize="1" />
</card>
);
};
butLogoLayout.prototype.onViewCreated = function (view) {
view.on("click", () => {
if (view._name.text() != "logo") {
menuOnClick(view)
}
eval(this._onClick);
});
};
ui.registerWidget("butLogo-layout", butLogoLayout);
return butLogoLayout;
})();
//获取dp转px值
var scale = context.getResources().getDisplayMetrics().density;
var but_r = Math.floor(but_w_h * scale + 0.5) / 2
//DP转PX
var dp2px = function (dp) {
return Math.floor(dp * scale + 0.5);
}
//PX转DP
var px2dp = function (px) {
return Math.floor(px / scale + 0.5);
}
/**
* 悬浮窗
* menu菜单悬浮窗
* 可在此处添加按钮
* 参数一个都不能少
*/
var w_menu = floaty.rawWindow(
<frame id="menu" w="{{dp2px(menu_r)}}px" h="{{dp2px(menu_r)}}px" visibility="gone" >//
<butLogo-layout name="{{but_data.menu_1.name}}" src="{{but_data.menu_1.src}}" bg="{{but_data.menu_1.bg}}" layout_gravity="center" />
<butLogo-layout name="{{but_data.menu_2.name}}" src="{{but_data.menu_2.src}}" bg="{{but_data.menu_2.bg}}" layout_gravity="center" />
<butLogo-layout name="{{but_data.menu_3.name}}" src="{{but_data.menu_3.src}}" bg="{{but_data.menu_3.bg}}" layout_gravity="center" />
<butLogo-layout name="{{but_data.menu_4.name}}" src="{{but_data.menu_4.src}}" bg="{{but_data.menu_4.bg}}" layout_gravity="center" />
<butLogo-layout name="{{but_data.menu_5.name}}" src="{{but_data.menu_5.src}}" bg="{{but_data.menu_5.bg}}" layout_gravity="center" />
</frame>