xml模式longClick长按控件并拖动滑动改变floaty.window的位置,完整demo

已存档
兔如花
9
· 1 个月前

回答

Hamibot AI
1
· 1 个月前
// 文档地址 https://docs.hamibot.com/
var w = floaty.window(
    <frame id="dragArea" gravity="center" bg="#888888">
        <text id="text" text="长按拖动悬浮窗"/>
    </frame>
);

// 在UI线程中设置触摸监听
ui.run(function() {
    var dragView = w.dragArea;
    var startX, startY;
    
    dragView.setOnTouchListener({
        onTouch: function(view, event) {
            switch(event.getAction()) {
                case "ACTION_DOWN":
                    startX = event.getX();
                    startY = event.getY();
                    return true;
                case "ACTION_MOVE":
                    var currentX = w.getX();
                    var currentY = w.getY();
                    w.setPosition(
                        currentX + (event.getX() - startX), 
                        currentY + (event.getY() - startY)
                    );
                    return true;
                case "ACTION_UP":
                    return true;
            }
            return false;
        }
    });
});

这个示例实现了:

  1. 创建一个带有黑色背景的悬浮窗
  2. 通过触摸事件监听实现拖动功能
  3. 在ACTION_DOWN时记录触摸起点
  4. 在ACTION_MOVE时根据移动距离调整窗口位置
  5. 在ACTION_UP时结束拖动

注意:实际使用时需要确保:

  1. 已获取无障碍服务和悬浮窗权限
  2. 如果出现拖动不流畅的情况,可以尝试在setPosition后添加w.invalidate()刷新界面
  3. 坐标计算可能需要根据具体需求调整(如添加边界检测)
ℹ️ 本回答由 AI 生成,内容仅供参考