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

在写五子棋的棋盘,自定义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;
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值