对Android ViewGroup ViewChildGroup View的事件的分发测试


对事件的分发支持如下:

这里的View是指textview类似的不能有子View的View,不是最大的父类View.

重写textview的时候 可以继承到dispatchTouchEvent 这是从View里面拿到的

textview类似的view里面没有这个方法 也就不会处理 但你继承了 就会处理

ACTION_CANCEL的执行 只是在你滑动超过了这个控件之外的时候 才会触发

每个轮流执行下去的都会执行ACTION_DOWN 但是只有最后处理事件的地方或者返回true的地方才会执行move和up 事件

所谓消费了此事件就是down move up都执行了 其他的 都只会执行一个down事件

ViewGroupViewChildGroupView

dispatchTouchEvent YesYesYes

onInterceptTouchEvent YesYesNo

onTouchEvent YesYesYes


顺序是ViewGroup——>ViewChildGroup——>View

如果都返回Super默认值 执行的逻辑是 执行了所有的down 但不会执行move和up方法

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent ACTION_DOWN

ViewChildGroup dispatchTouchEvent ACTION_DOWN

ViewChildGroup onInterceptTouchEvent ACTION_DOWN

View dispatchTouchEvent ACTION_DOWN

View onTouchEvent ACTION_DOWN

ViewChildGroup onTouchEvent ACTION_DOWN

ViewGroup onTouchEvent ACTION_DOWN

View dispatchTouchEvent 返回true 其他都默认

所有的onTouchEvent 都不会执行 其余的全部执行

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent ACTION_DOWN

ViewChildGroup dispatchTouchEvent ACTION_DOWN

ViewChildGroup onInterceptTouchEvent ACTION_DOWN

View dispatchTouchEvent ACTION_DOWN

ViewGroup dispatchTouchEvent ACTION_MOVE

ViewGroup onInterceptTouchEvent ACTION_MOVE

ViewChildGroup dispatchTouchEvent ACTION_MOVE

ViewChildGroup onInterceptTouchEvent ACTION_MOVE

View dispatchTouchEvent ACTION_MOVE

######## ……执行N次move

ViewGroup dispatchTouchEvent ACTION_UP

ViewGroup onInterceptTouchEvent ACTION_UP

ViewChildGroup dispatchTouchEvent ACTION_UP

ViewChildGroup onInterceptTouchEvent ACTION_UP

View dispatchTouchEvent ACTION_UP

View dispatchTouchEvent 返回false 其他都默认

这时候 view的onTouchEvent 不会执行 其余的down都会执行 move和up都不执行

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent ACTION_DOWN

ViewChildGroup dispatchTouchEvent ACTION_DOWN

ViewChildGroup onInterceptTouchEvent ACTION_DOWN

View dispatchTouchEvent ACTION_DOWN

ViewChildGroup onTouchEvent ACTION_DOWN

ViewGroup onTouchEvent ACTION_DOWN

View onTouchEvent 返回true 其他都默认

ViewChildGroup 和ViewGroup的onTouchEvent不会执行 别的全部动作都执行

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent ACTION_DOWN

ViewChildGroup dispatchTouchEvent ACTION_DOWN

ViewChildGroup onInterceptTouchEvent ACTION_DOWN

View dispatchTouchEvent ACTION_DOWN

View onTouchEvent ACTION_DOWN

ViewChildGroup onTouchEvent ACTION_DOWN

ViewGroup onTouchEvent ACTION_DOWN

ViewGroup dispatchTouchEvent ACTION_MOVE

ViewGroup onInterceptTouchEvent ACTION_MOVE

ViewChildGroup dispatchTouchEvent ACTION_MOVE

ViewChildGroup onInterceptTouchEvent ACTION_MOVE

View dispatchTouchEvent ACTION_MOVE

View onTouchEvent ACTION_MOVE

……执行N次move

ViewGroup dispatchTouchEvent ACTION_UP

ViewGroup onInterceptTouchEvent ACTION_UP

ViewChildGroup dispatchTouchEvent ACTION_UP

ViewChildGroup onInterceptTouchEvent ACTION_UP

View dispatchTouchEvent ACTION_UP

View onTouchEvent ACTION_UP

View onTouchEvent 返回false 其他都默认 所有的down都会执行

但不会执行move和up

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent ACTION_DOWN

ViewChildGroup dispatchTouchEvent ACTION_DOWN

ViewChildGroup onInterceptTouchEvent ACTION_DOWN

View dispatchTouchEvent ACTION_DOWN

View onTouchEvent ACTION_DOWN

ViewChildGroup onTouchEvent ACTION_DOWN

ViewGroup onTouchEvent ACTION_DOWN

ViewChildGroup dispatchTouchEvent 返回true 其他都默认

这时候执行了ViewGroup和ViewChildGroup的dispatchTouchEvent的所有方法

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent ACTION_DOWN

ViewChildGroup dispatchTouchEvent ACTION_DOWN

ViewGroup dispatchTouchEvent ACTION_MOVE

ViewGroup onInterceptTouchEvent ACTION_MOVE

ViewChildGroup dispatchTouchEvent ACTION_MOVE

……执行N次

ViewGroup dispatchTouchEvent ACTION_UP

ViewGroup onInterceptTouchEvent ACTION_UP

ViewChildGroup dispatchTouchEvent ACTION_UP

ViewChildGroup dispatchTouchEvent 返回false 其他都默认

这时候 执行了ViewGroup和ViewChildGroup的dispatchTouchEvent

的ACTION_DOWN方法 同时执行了ViewGroup的onTouchEvent方法 move和up不执行

猜测之后由还有activity的dispatchTouchEvent和onTouchEvent方法执行到底

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent ACTION_DOWN

ViewChildGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onTouchEvent ACTION_DOWN

ViewChildGroup onInterceptTouchEvent 返回true 其他都默认

这时候 执行了ViewGroup和ViewChildGroup的所有ACTION_DOWN方法 move和up不执行

猜测 之后还由activity的dispatchTouchEvent和onTouchEvent方法执行到底

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent ACTION_DOWN

ViewChildGroup dispatchTouchEvent ACTION_DOWN

ViewChildGroup onInterceptTouchEvent ACTION_DOWN

ViewChildGroup onTouchEvent ACTION_DOWN

ViewGroup onTouchEvent ACTION_DOWN

ViewChildGroup onInterceptTouchEvent 返回false 其他都默认

这时候 执行了所有ACTION_DOWN方法 move和up不执行

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent ACTION_DOWN

ViewChildGroup dispatchTouchEvent ACTION_DOWN

ViewChildGroup onInterceptTouchEvent ACTION_DOWN

View dispatchTouchEvent ACTION_DOWN

View onTouchEvent ACTION_DOWN

ViewChildGroup onTouchEvent ACTION_DOWN

ViewGroup onTouchEvent ACTION_DOWN

ViewChildGroup TouchEvent 返回true 其他都默认

这时候 执行了除了ViewGroup onTouchEvent外的 所有ACTION_DOWN方法

之后执行ViewGroup的dispatchTouchEvent onInterceptTouchEvent

ViewChildGroup的dispatchTouchEvent和onTouchEvent方法的move和up方法

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent ACTION_DOWN

ViewChildGroup dispatchTouchEvent ACTION_DOWN

ViewChildGroup onInterceptTouchEvent ACTION_DOWN

View dispatchTouchEvent ACTION_DOWN

View onTouchEvent ACTION_DOWN

ViewChildGroup onTouchEvent ACTION_DOWN

ViewGroup dispatchTouchEvent ACTION_MOVE

ViewGroup onInterceptTouchEvent ACTION_MOVE

ViewChildGroup dispatchTouchEvent ACTION_MOVE

ViewChildGroup onTouchEvent ACTION_MOVE

……执行N次

ViewGroup dispatchTouchEvent ACTION_UP

ViewGroup onInterceptTouchEvent ACTION_UP

ViewChildGroup dispatchTouchEvent ACTION_UP

ViewChildGroup onTouchEvent ACTION_UP

ViewChildGroup TouchEvent 返回false 其他都默认

执行了所有down方法 不会执行move和up方法

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent ACTION_DOWN

ViewChildGroup dispatchTouchEvent ACTION_DOWN

ViewChildGroup onInterceptTouchEvent ACTION_DOWN

View dispatchTouchEvent ACTION_DOWN

View onTouchEvent ACTION_DOWN

ViewChildGroup onTouchEvent ACTION_DOWN

ViewGroup onTouchEvent ACTION_DOWN

ViewGroup dispatchTouchEvent 返回true 其他都默认

ViewGroup的dispatchTouchEvent执行了所有的down move up操作

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup dispatchTouchEvent ACTION_MOVE

……执行N次

ViewGroup dispatchTouchEvent ACTION_UP

ViewGroup dispatchTouchEvent 返回false 其他都默认

ViewGroup的dispatchTouchEvent执行了down操作 不会有up和move操作 其他事件全部屏蔽

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent 返回true 其他都默认

ViewGroup消费了所有的down事件 都会执行 但是move和up不会执行

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent ACTION_DOWN

ViewGroup onTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent 返回false 其他都默认

执行了所有down方法 不会执行move和up方法

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent ACTION_DOWN

ViewChildGroup dispatchTouchEvent ACTION_DOWN

ViewChildGroup onInterceptTouchEvent ACTION_DOWN

View dispatchTouchEvent ACTION_DOWN

View onTouchEvent ACTION_DOWN

ViewChildGroup onTouchEvent ACTION_DOWN

ViewGroup onTouchEvent ACTION_DOWN

ViewGroup onTouchEvent 返回true 其他都默认

执行了所有down方法 最后由ViewGroup的dispatchTouchEvent和onTouchEvent消费了move和up

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent ACTION_DOWN

ViewChildGroup dispatchTouchEvent ACTION_DOWN

ViewChildGroup onInterceptTouchEvent ACTION_DOWN

View dispatchTouchEvent ACTION_DOWN

View onTouchEvent ACTION_DOWN

ViewChildGroup onTouchEvent ACTION_DOWN

ViewGroup onTouchEvent ACTION_DOWN

ViewGroup dispatchTouchEvent ACTION_MOVE

ViewGroup onTouchEvent ACTION_MOVE

……执行N次

ViewGroup dispatchTouchEvent ACTION_IP

ViewGroup onTouchEvent ACTION_MOVE

ViewGroup onTouchEvent 返回false 其他都默认

执行了所有down方法 不会执行move和up方法

ViewGroup dispatchTouchEvent ACTION_DOWN

ViewGroup onInterceptTouchEvent ACTION_DOWN

ViewChildGroup dispatchTouchEvent ACTION_DOWN

ViewChildGroup onInterceptTouchEvent ACTION_DOWN

View dispatchTouchEvent ACTION_DOWN

View onTouchEvent ACTION_DOWN

ViewChildGroup onTouchEvent ACTION_DOWN

ViewGroup onTouchEvent ACTION_DOWN