悬浮窗的事件代码应该是在ui线程中运行的,容易出现崩溃卡死问题。你让他在新线程中运行就正常了。
var window = floaty.window(
<frame>
<button id="action" text="i 获取x1" w="90" h="40" bg="#77ffffff"/>
</frame>
);
setInterval(()=>{}, 1000);
//var execution = null;
//我的变量
var x1,x2,t = 0,k = 1.58;
//记录按键被按下时的触摸坐标
var x = 0, y = 0;
//记录按键被按下时的悬浮窗位置
var windowX, windowY;
//记录按键被按下的时间以便判断长按等动作
var downTime;
window.action.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:
//移动手指时调整悬浮窗位置
window.setPosition(windowX + (event.getRawX() - x),
windowY + (event.getRawY() - y));
//如果按下的时间超过6秒判断为长按,退出脚本
if(new Date().getTime() - downTime > 6000){
exit();
}
return true;
case event.ACTION_UP:
//手指弹起时如果偏移很小则判断为点击
if(Math.abs(event.getRawY() - y) < 5 && Math.abs(event.getRawX() - x) < 5){
onClick();
if(t > 0){
// press(550,750,t); //这一行卡死,经测试t的数值正常,注释这一行能正常运行。
threads.start(function(){
press(550,750,t);
t = 0;
});
}
}
return true;
}
return true;
});
function onClick(){
if(window.action.getText() == 'i 获取x1'){
x1 = window.getX();
window.action.setText('i 获取x2');
}else{
x2 = window.getX();
t = (x1 - x2) * k;
if(t < 0)
t = -t;
window.action.setText('i 获取x1');
}
}
最后由 编辑