Android事件传递关于View的OnTouchEvent返回true时

关于事件分发中,当OnTouchEvent中ACTION_MOVE是否会执行的分析。

1,当MyView的OnTouchEvent返回false时:

come.isuixin.debug E/MyViewGroup: onInterceptTouchEvent  ACTION_DOWN
come.isuixin.debug E/MyView: onTouchEvent  ACTION_DOWN
come.isuixin.debug E/MyViewGroup: onTouchEvent  ACTION_DOWN

可以看到,MyView在OnTouchEvent方法中,只执行了ACTION_DOWN,并没有ACTION_MOVE。所以,在view中,如果down事件没有被消耗,那么move  up这些后续事件就不会再交给view的OnTouchEvent方法啦。

而且在MyViewGroup的onInterceptTouchEvent方法中,也只有ACTION_DOWN事件。

2,当MyView的OnTouchEvent返回true时:

come.isuixin.debug E/MyViewGroup: onInterceptTouchEvent  ACTION_DOWN
come.isuixin.debug E/MyView: onTouchEvent  ACTION_DOWN
come.isuixin.debug E/MyViewGroup: onInterceptTouchEvent  ACTION_MOVE
come.isuixin.debug E/MyView: onTouchEvent  ACTION_MOVE
come.isuixin.debug E/MyViewGroup: onInterceptTouchEvent  ACTION_MOVE
come.isuixin.debug E/MyView: onTouchEvent  ACTION_MOVE
come.isuixin.debug E/MyViewGroup: onInterceptTouchEvent  ACTION_UP
come.isuixin.debug E/MyView: onTouchEvent  ACTION_UP

可以看到,MyView在OnTouchEvent方法中,ACTION_DOWN   ACTION_MOVE   ACTION_UP都执行啦。MyViewGroup的OnTouchEvent方法中没有被调用。这是因为事件在MyView中被消耗,不会往外传递啦。

3,当MyView的OnTouchEvent返回true,MyViewGroup在onInterceptTouchEvent中的move时拦截:

come.isuixin.debug E/MyViewGroup: onInterceptTouchEvent  ACTION_DOWN
come.isuixin.debug E/MyView: onTouchEvent  ACTION_DOWN
come.isuixin.debug E/MyViewGroup: onInterceptTouchEvent  ACTION_MOVE
come.isuixin.debug E/MyView: onTouchEvent  ACTION_CANCEL
come.isuixin.debug E/MyViewGroup: onTouchEvent  ACTION_MOVE
come.isuixin.debug E/MyViewGroup: onTouchEvent  ACTION_MOVE
come.isuixin.debug E/MyViewGroup: onTouchEvent  ACTION_UP

可以看到,这时myView会收到cancel事件,后续的move  up都会交给viewGroup的OnTouchEvent来处理,拦截方法不再走。

总结:

当View的OnTouchEvent返回false时(默认返回的是false):down事件首先传递到ViewGroup的onInterceptTouchEvent

然后传递到view的OnTouchEvent.因为返回false,不处理,所以又返回给ViewGroup的OnTouchEvent.如果ViewGroup的

OnTouchEvent返回true,那么后续move  up不会走onInterceptTouchEvent,而是直接交给onTouchEvent.   如果ViewGroup的 OnTouchEvent返回false,那么说明ViewGroup层也不会消耗事件序列,那么后续的move  up等事件不会到View Group的onInterceptTouchEvent中。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值