小米手机出现OnTouch事件中MotionEvent.ACTION_UP不执行

今天在做一个录音的功能,按下开始录音,放开结束录音。完美的实现了,还测试了一两台手机,打算攻下个功能点去做了的。结果,好死不死,用了我自己的小米note3的手机也测了下录音,结果????为什么明明放开了,还没有结束录音???还需要再次按下才能结束录音,当时那个心呐,痛的我。还特意去测试那找了小米5的手机来测,但是人家还是好好的,正常按下放开。一点毛病都没,那会心就更痛了。怎么只有我的手机才出现这个问题,开始以为是传送门的问题,把传送门关了后还是一样,结果就找啊找啊,眼泪都掉下来了,终于找到了!。

原来,MotionEvent.ACTION_UP没有执行啊,执行的是MotionEvent.ACTION_CANCEL事件!!!

原因是:

当控件收到前驱事件(什么叫前驱事件?一个从DOWN一直到UP的所有事件组合称为完整的手势,中间的任意一次事件对于下一个事件而言就是它的前驱事件)之后,后面的事件如果被父控件拦截,那么当前控件就会收到一个CANCEL事件,并且把这个事件会传递给它的子事件。(注意:这里如果在控件的onInterceptTouchEvent中拦截掉CANCEL事件是无效的,它仍然会把这个事件传给它的子控件)之后这个手势所有的事件将全部拦截,也就是说这个事件对于当前控件和它的子控件而言已经结束了。

简单来说就是他不是一个完整的手势响应 例如 子控件只是响应了down 而父控件把子控件的up事件拦截了 这个时候就会触发cancel事件 来区

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值