悬浮窗的Ontouch 如何做单击和双击事件的区分

Bin_hell 2017-10-30 04:25:25
下面是我做的方法,在activity是可以运行成功的,在service中运行不到handler。有没有好的方法,求推荐
public boolean onTouch(View view, MotionEvent motionEvent) {
float x = motionEvent.getRawX();
float y = motionEvent.getRawY();
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
Log.i("LOG", "1111111");
//按下触摸点的值
lastX = x;
lastY = y;
//view位置的值
paramX = wManagerLayout.x;
paramY = wManagerLayout.y;
/*
单击灭屏操作
*/
if (lastX == x | lastY == y)
i = 1;
/*
双击灭屏的操作
*/
fistToch = System.currentTimeMillis();



if ((fistToch - middlecount) < 200) {
Log.i("log","我运行了双击");
handler.removeMessages(1);
handler.sendEmptyMessage(2);

} else{
handler.sendEmptyMessageDelayed(1,310);
Log.i("log","我运行的单击");
}




return false;
}
if (motionEvent.getAction() == MotionEvent.ACTION_MOVE) {
Log.i("LOG", "2222222");
//触摸点的值减去按下时触摸点的值就是变化量
int dx = (int) (x - lastX);
int dy = (int) (y - lastY);
//原来的view的位置,+变化量的
wManagerLayout.x = paramX + dx;
wManagerLayout.y = paramY + dy;
wm.updateViewLayout(view, wManagerLayout);
i = 0;
//进行判断变化量,是否有移动view
//小图标要进行抖动判断
//&与运算
/*
单击灭屏操作的抖动判断
*/
if ((dx > 2 | dx < -2) | (dy > 2 | dy < -2)) {
i = 0;
} else
i = 1;


return false;
}
if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
Log.i("LOG", "333333");

middlecount = fistToch;
// count = 1;
return false;
}
return false;
}
/*
用进程来区分单击和双击动作
*/
private Handler handler=new Handler(){
public void handlerMessage(Message message){
super.handleMessage(message);
Toast.makeText(MyService.this, "这是单击", Toast.LENGTH_SHORT).show();
switch (message.what){
case 1:
Toast.makeText(MyService.this, "这是单击", Toast.LENGTH_SHORT).show();
mAsr.startListening(myListening);
break;
case 2:
policyManager.lockNow();
break;
}
}
};
...全文
247 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
莫非有道 2017-10-30
  • 打赏
  • 举报
回复

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧