onTouchEvent方法中MotionEvent.CANCEL动作分析和遇到

在监听手指滑动的时候,会有两个方法可选onTouch方法和onTouchEvent方法.

简单记录下两个方法的区别:
onTouch方法:onTouch方法是View的 OnTouchListener借口中定义的方法。当一个View绑定了OnTouchLister后,当有touch事件触发时,就会调用onTouch方法。(当把手放到View上后,onTouch方法被一遍一遍地被调用)

2.onTouchEvent方法:onTouchEvent方法是override 的Activity的方法。重新了Activity的onTouchEvent方法后,当屏幕有touch事件时,此方法就会别调用。(当把手放到Activity上时,onTouchEvent方法就会一遍一遍地被调用)


当给一个view添加了onTouch事件的监听后,事件首先是onTouch方法执行,如果onTouch返回值为true,表示这个touch事件被onTouch方法处理完毕,不会把touch事件再传递给Activity,也就是说onTouchEvent方法不会被调用,如果onTouch的返回值是false,表示这个touch事件没有被view完全处理,onTouch返回以后,touch事件被传递给Activity,onTouchEvent方法被调用。PS:当返回的是super.onTouchEvent(event)的值时,会执行onTouchEvent方法。

言归正传,onTouchEvent作为监听手指滑动的方法,常用的就是MotionEvent.ACTION_DOWN,MotionEvent.ACTION_MOVE,MotionEvent.ACTION_UP三个动作,通过getAction()获取状态并做处理,处理完成后会return true,表示该动作已经处理完成,如果return false会让事件会回传到父控件来处理。

MotionEvent.ACTION_CANCEL根据官方的文档,讲的是当前手势被释放,你将不会接收到其他的事件,应该向ACTION_UP一样对待它。在使用时,会发现在滑动时,滑动到某些区域会直接获取MotionEvent.ACTION_CANCEL动作,但是实际上手指还在屏幕上,没有移开,根据说明是父控件截断了事件的传递,那个就修改父控件的onInterceptTouchEvent方法,直接返回false,让事件传递下去,不要被拦截。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值