安卓触摸事件调度顺序

//总结:
//View 触摸有:dispatchTouchEvent(分发触摸事件) 和onTouchEvent(消费触摸事件) 两个。
// View Group 触摸有:dispatchTouchEvent(分发触摸事件) 和onTouchEvent(消费触摸事件) onInterceptTouchEvent(拦截触摸事件)

// 返回值含义:
//onInterceptTouchEvent 当前是否拦截当前事件
//onTouchEvent 是否消费当前事件
//dispatchTouchEvent:当前事件是否已经被消费了。该方法是调用了onTouchEvent返回的 dispatchTouchEvent返回值的作用是用于标志这个事件是否“消费了”, 无论是自己或者下面的子一级用掉了都算是消费掉。*

//viewGroup中如果使用onInterceptTouchEvent 拦截事件后将不会分发给子View,如果子view 消费过Down事件则会给子view一个cancle 事件

//如果子View onTouchEvent不消费触摸事件。则会回到ViewGroup的onTouchEvent

//什么情况会产生:ACTION_CANCEL
//当view 消费Donw 后如果后续的Move 或者Up 被拦截后产生

//默认
// ViewGroup.dispatchTouchEvent ---->ViewGroup.onInterceptTouchEvent ----> view.dispatchTouchEvent ---->view.onTouchEvent ---->ViewGroup.onTouchEvent
//Donw 时候回就直接拦截事件的情况
//ViewGroup.dispatchTouchEvent ----> ViewGroup.onInterceptTouchEvent ---->ViewGroup.onTouchEvent
//移动时候拦截
// ViewGroup.dispatchTouchEvent(down) ----> ViewGroup.onInterceptTouchEvent(down) ----> view.dispatchTouchEvent(down) ---->view.onTouchEvent(down)---> ViewGroup.dispatchTouchEvent(move) ----> ViewGroup.onInterceptTouchEvent(move)----> view.dispatchTouchEvent(cancle) ---->view.onTouchEvent(cancle)
//view 消费事件的情况
//ViewGroup.dispatchTouchEvent ---->ViewGroup.onInterceptTouchEvent ----> view.dispatchTouchEvent ---->view.onTouchEvent


//如果有setOnTouchListener 情况:
//dispatchTouchEvent->onTouch->onTouchEvent

//总结:view 事件分发是通过dispatchTouchEvent执行的。dispatchTouchEvent会调用onInterceptTouchEvent和onTouch以及onTouchEvent
posted @ 2021-06-16 22:58  烟花易冷心易碎  阅读(76)  评论(0编辑  收藏  举报