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中。

 

 

 

 

 

 

你可能感兴趣的:(事件传递)