android时间分发
2017-03-16 15:21:09 24 举报
Android事件分发流程图
作者其他创作
大纲/内容
true
会调用其中的方法
在DOWN的时候已经建立起了链表,所以直接找到消费的子View,将事件给它
否
PhoneWindow(superDispatchTouchEvent())
clickable或者longclickable之中有一个为true
调用该子View的dispatchTouchEvent()
false(ViewGroup不会去拦截)
是
true(ViewGroup之后不能拦截)
在遍历过程中通过getTouchTarget()判断当前的子View是否在mFristTuchTarget这条链表上。
true(ViewGroup会去拦截)
Android事件分发流程图
函数调用栈一直返回true
表示我们之前该ViewGroup已经拦截过事件或者事件到底然后返回
disallowIntercept
传入null调用dispatchTransformedTouchEvent()
判断子View是否为0(不为0就倒序遍历,这是为了实现 后添加在界面上的先被触发)
UP或者MOVE
如果本View或者子View处理成功,那么子View会放入节点列表
设置了onTouchListener
事件被消耗
调用super.dispatchTouchEvent()
找到了最终消耗事件的View
false
view处于不可用状态?
return
View设置了TouchDlegate?
经过递归调用之后,找到了消耗事件的子View
false(ViewGroup之后允许拦截)
onInterceptTouchEvent(ev)
DecorView(super.dispatchTouchEvent())
ViewGroup(dispatchTouchEvent())
Activity(dispatchTouchEvent())
找到子View,传入该View调用dispatchTransformedTouchmentEvent()
mFristTouchTarget == null
运行其方法
Down(重置之前所有标记位,所以disallowIntercept为false)
0 条评论
回复 删除
下一页