事件类型: down > move > up > click
传递顺序:
> aty.dispatch分发 执行super返值true (false|true:事件消失因为没有执行在super的传递)
> viewGroup.dispatch分发 执行super返值true (true:跑完本方法不会有后续 | false:返回上级执行onTouchEvent响应并加下面粗体规则)
> viewGroup.onIntercept拦截 执行super返值false (true:自己响应 | false:正常执行流程)
> view.dispatch分发 执行super返值true (true:跑完本方法不会有后续 | false:返回上级执行onTouchEvent响应并加下面粗体规则)
> 期间在aty设置的view.setOnTouchListener可插队并选择性消费 (true:消费了不会继续传递)
> view会onTouchEvent响应 执行super返值true (true:消费了不会继续传递不会调用click监听因为没调super | false:返回上级响应是否消费并加下面粗体规则)
> 最后执行aty设置的view.setOnClickListener
** 只要down执行了由外层到里层又到外层,后续的move和up就会直接不会进去里层 不执行冗余操作 ** ** 例如一个拦截操作 **
MainActivity: dispatchTouchEvent: down
CustomViewGroup: dispatchTouchEvent: down
CustomViewGroup: onInterceptTouchEvent: down
CustomViewGroup: onTouchEvent: down
MainActivity: onTouchEvent: down
MainActivity: dispatchTouchEvent: move
MainActivity: onTouchEvent: move
MainActivity: dispatchTouchEvent: up
MainActivity: onTouchEvent: up
dispatchTouchEvent
onTouchEvent
(分发和响应 aty viewGroup view 都有)
onInterceptTouchEvent
(拦截 只有中间层 viewGroup 有)
setOnTouchListener
setOnClickListener
(设置监听 aty 调用)
默认都分发true, 默认都不拦截false, 默认view响应消费事件true,默认非view响应不消费事件false
方法返回值返回true false super.XXX
true代表已经执行
false代表不执行
super.XXX代表去执行