事件分发(面试)
2017-02-10 23:20:30 0 举报
登录查看完整内容
事件分发是指将事件从发送者传递到接收者的过程。在计算机编程中,事件分发通常涉及到多个组件之间的交互。例如,当用户点击一个按钮时,操作系统会将这个事件传递给应用程序,然后应用程序会将这个事件传递给相应的控件。这个过程可能涉及到多个层级的传递和处理,直到最终的接收者收到并处理这个事件。 在面试中,面试官可能会问到你对事件分发的理解,以及你在实际项目中是如何处理事件的。你可以回答这些问题,展示你对事件分发机制的理解和实践经验。
作者其他创作
大纲/内容
没有设置,或者设置了返回false
找到子View,传入该View调用 dispatchTransformedTouchEvent()
DecorView(superDispatchTouchEvent())
否
mFristTouchTarget==null
CLICKABLE或者LONGCLICKABLE之中有一个为true
falseViewGroup不会去拦截
不等于null
找到了最终消耗事件的View
运行其方法
false(ViewGroup之后允许拦截)
在down的时候已经建立起了链表,所以直接找到消费的子View,将事件给它。
设置了onTouchListener,会调用其中的方法,并且如果返回了true,事件被消耗
调用super.dispatchTouchEvent()
trueViewGroup会去拦截
up或者move
true(ViewGroup之后不能拦截)
调用该子View的dispatchTouchEvent()
View是否设置了TouchDlegate
如果本view或者子view处理成功,那么子View会放入节点列表
PhoneWindow(superDispatchTouchEvent())
ViewGroup(dispatchTouchEvent())
Down(重置之前所有标记位,所以flagdisallowintercept为false)
Activity(dispatchTouchEvent())
是
传入null调用 dispatchTransformedTouchEvent()
view是否处于不可以用状态
经过递归调用之后,找到了消耗事件的子View
flagdisallowintercept==true
表示我们之前该ViewGroup已经拦截过事件或者事件到底然后返回)
onInterceptTouchEvent(ev)==true
函数调用栈一直返回ture。
判断子View是否为零(不为零就倒序遍历,这是为了实现后添加在界面上的先被触发)
在遍历过程中通过getTouchTarget()判断当前的子View是否在mFristTouchTarget这条链表上。
等于null
0 条评论
回复 删除
下一页