AutoJS custom floating menu (complete code attached)

When we develop Autojs scripts, we need to use the floating window function to control the script. So how to do it? Today I will share some with you, let’s take a look at the effect first:

Insert image description here

Adjust movement and welt.

Prevent sliding off screen

Attached complete code



var img_url = "file://res/2.jpg"

suspendedWindow();

function suspendedWindow() {
    
    

    window = floaty.rawWindow(
        <horizontal gravity="center_vertical">
            <img id="floaty_icon" src="{
    
    {img_url}}" w="40" h="40" alpha="0.8" circle="true" borderWidth="1dp" borderColor="black" />
            <horizontal id="h_drawer">
                <vertical>
                    <button id="ui_start" textColor="#FFFFFF" text="开始" bg="#4F4F4F" padding="0" h="40" w="50" />
                    <text text="" h="1" />
                    <button id="ui_close" textColor="#FFFFFF" text="结束" bg="#4F4F4F" padding="0" h="40" w="50" />
                </vertical>
            </horizontal>
        </horizontal>
    );
    window.setPosition(50, device.height / 3);
    window.exitOnClose();
    setInterval(() => {
    
     }, 1000);

    window.h_drawer.visibility = 8;


    var execution = null;
    var x = 0,
        y = 0;
    var windowX, windowY;
    var downTime;
    console.log("w=" + device.width);
    console.log("h=" + device.height);
    window.floaty_icon.setOnTouchListener(function (view, event) {
    
    
        switch (event.getAction()) {
    
    
            case event.ACTION_DOWN:
                x = event.getRawX();
                y = event.getRawY();
                windowX = window.getX();
                windowY = window.getY();
                downTime = new Date().getTime();
                return true;
            case event.ACTION_MOVE:
                //移动手指时调整悬浮窗位置
                let movexx = windowX + (event.getRawX() - x);
                let moveyy = windowY + (event.getRawY() - y);
                if (movexx < 0 || movexx > device.width) {
    
    
                    movexx = 0;
                }

                if (moveyy < 0 || moveyy > device.height) {
    
    
                    moveyy = 0;
                }
                window.setPosition(movexx, moveyy);
                console.log("event y=" + event.getRawY());
                console.log("event x=" + event.getRawX());
                return true;
            case event.ACTION_UP:
                if (Math.abs(event.getRawY() - y) < 5 && Math.abs(event.getRawX() - x) < 5) {
    
    
                    drawerStatus();
                }
                return true;
        }
        return true;
    });

    function drawerStatus() {
    
    
        if (window.h_drawer.visibility == 8) {
    
    
            window.h_drawer.visibility = 0;
        } else {
    
    
            window.h_drawer.visibility = 8;
        }
    }

    window.ui_close.setOnTouchListener(function (view, event) {
    
    
        if (event.getAction() == event.ACTION_UP) {
    
    
            toastLog("关闭脚本...");
            window.close();
            exit();
        }
        return true;
    });

    //运行按钮事件
    window.ui_start.setOnTouchListener(function (view, event) {
    
    
        if (event.getAction() == event.ACTION_UP) {
    
    
            window.setPosition(50, device.height / 3);
            window.disableFocus();
            if (window.ui_start.text() == "开始") {
    
    
                window.ui_start.text("暂停");
                console.log("开始运行悬浮窗");

                var main = threads.start(function () {
    
    
                    device.keepScreenOn()
                    //运行脚本
                    //todo 在这里运行你的脚本
                })

                //两秒不点击暂停,则隐藏抽屉
                setTimeout(function () {
    
    
                    if (window.ui_start.text() == "暂停") {
    
    
                        drawerStatus()
                    }
                }, 3000)

                //监控运行还是暂停
                var monitoringStatus = setInterval(function () {
    
    
                    if (window.ui_start.text() == "开始") {
    
     //是运行说明暂停了
                        main.interrupt()
                        toastLog("暂停了")
                        clearInterval(monitoringStatus)
                    }
                }, 100)

            } else {
    
    

                window.ui_start.text("开始");
                toastLog("开始暂停...");
                threads.shutDownAll();
            }
        }
        return true;
    });

    //启用按键监听
    events.observeKey();

    events.on("key", function (code, event) {
    
    
        engines.myEngine().forceStop();
        threads.shutDownAll();
    });
}

Guess you like

Origin blog.csdn.net/csl12919/article/details/132177262