您的位置:首页 > 其它

自定义控件只捕获手势点击事件,如果发生了滑动手势则放弃捕获

2016-05-27 16:07 267 查看
在写五子棋的棋盘,自定义view的时候,onTouchEvent()方法中一直在纠结怎么处理点击事件

1.我需要捕捉用户点击棋盘的位置,从而进行落子操作

2.按照正常的操作习惯,如果点击了屏幕,但是用户后悔了,就会把手指往边上滑动,从而表示取消此次操作

完成这个效果的思路是:

1.记录用户手指点击屏幕时的坐标

2.记录用户手指离开屏幕时的坐标

3.计算up-down的差值,这里可以自定义一个差值限制,比如10,如果差值的绝对值(用户手指不一定是左滑还是右滑,所以是绝对值)大于10,则表示view对此次手势不感兴趣

思路很简单,实现也很简单,虽然说简单,虽然确实也很简单,但也消磨了我不少时间琢磨。

贴一下代码

private boolean isMove = false;//用户手指是否滑动
private int down_x;//手指落下时的x坐标
private int down_y;//手指落下时的y坐标
--这里之所以要把这三个变量声明在函数外,是因为每次手势变动(落下,滑动,抬起)都会调用onTouchEvent,如果定义在函数内,则每次调用都会被初始化,值会被改变
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {//手指落下的时候记录下坐标
down_x = (int) event.getX();
down_y = (int) event.getY();
return true;
}
if (event.getAction() == MotionEvent.ACTION_MOVE) {//手指移动的时候记录移动的坐标
if (Math.abs(event.getX() - down_x) > 10 || Math.abs(event.getY() - down_y) > 10) {//如果差值的绝对值大于设定阀值,则表示滑动了手指,对手势不感兴趣
isMove = true;//滑动了手指
}
return false;
}
if (event.getAction() == MotionEvent.ACTION_UP) {//当用户手指离开屏幕的时候
if (isMove) {//如果移动了,将isMove重新设置为false,重新等待下一次手势操作
isMove = false;
return false;
}
…………
…………
…………//可以在此进行相应逻辑操作
return true;
}
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息