view的onTouchListener和onClickListener冲突

view的onTouchListener和onClickListener冲突

最近遇到了一个问题,需求又需要可以移动的view又要可以点击view,不知道怎么处理。

这里参考了天然大咪咪的文章。

主要是在与onTouch的事件中。如果是case MotionEvent.ACTION_DOWN: 返回false,是点击事件;返回true,不记为点击事件,所以解决办法呢,是定义一个全局变量,记录是否为移动操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = params.x;
startY = params.y;
startTouchX = event.getRawX();
startTouchY = event.getRawY();
if(isMove==true){
return true;//不触发点击事件
}else {
return false;//触发点击事件
}
case MotionEvent.ACTION_MOVE:
isMove=true;
params.x = startX + (int) (event.getRawX() - startTouchX);
params.y = startY + (int) (event.getRawY() - startTouchY);
//更新View的位置
mWindowManager.updateViewLayout(floatBtn, params);
return true;
case MotionEvent.ACTION_UP:
isMove=false;
return true;
}

所以当执行ACTION_MOVE时记录为true标识。然后在ACTION_DOWN做判断即可。如果返回false会自动执行onClick事件。别忘记在ACTION_UP离手的时候,恢复标识。