事件分发机制
2022-06-30 12:59:08 12 举报
事件分发机制是Android开发中的一个核心概念,主要用来处理用户与应用的交互事件。当一个事件发生时(例如点击按钮),系统会把这个事件传递给相应的事件处理器。这个处理器通常是一个实现了特定接口的类,它定义了如何处理这个事件。事件分发机制的主要目标是确保事件的一致性和准确性,即使在多线程环境下也是如此。此外,它还能有效地管理事件的优先级和队列,以便在处理大量并发事件时保持应用的稳定性和响应速度。总的来说,事件分发机制是Android应用能够响应用户操作并实现各种功能的关键。
作者其他创作
大纲/内容
事件交给该ViewGroup
false
true
分发给下一个子元素
onTouchEvent
事件如何处理要看onTouch的返回值
Window
遍历ViewGroup的所有子元素,判断子view是否能接受点击事件
ViewGroup默认不拦截
用来进行事件分发,表示是否消耗当前事件
viewgroup
可以用于解决滑动冲突
true (拦截)
dispatchTouchEvent
1.子元素是否在播放动画2.点击事件的坐标是否落在子元素的区域内
当ACTION_UP事件发生时,就会触发performClick,从而
1.viewgroup没有子元素2.子元素处理了点击事件,但是在dispatchTouchEvent中返回了false
意味着没有人处理,所有view的onTouchEvent都返回了false
view对点击事件的处理
DecorView
子View的
view
用来判断是否拦截某个事件,表示是否拦截当前事件
false (不拦截)
不会调用onTouchEvent
onInterceptTouchEvent
Activity
只要view的CLICKABLE和LONG_CLICKABLE有一个为true,那它就会消耗这个事件,不管它是否是DISABLE
用来处理点击事件,表示是否消耗当前事件
整个事件循环结束了
mFirstTouchTarget!=null是指当事件由ViewGroup的子元素成功处理
伪代码:public boolean dispatchTouchEvent(MotionEvent ev){ boolean comsue = false; if(onInterceptTouchEvent(ev){ consume = onTouchEvent(ev); }else{ consume = child.dispatchTouchEvent(ev); } return consume;}
onTouch
父容器的onTouchEvent
判断是否设置了OnTouchListener
Activity的onTouchEvent会被调用
onclick
无子元素处理
设置了OnClickListener
....
ViewGroup
mFirstTouchTarget被赋值并终止对子元素的遍历
Activity的onTouchEvent
判断是否拦截的标准:事件类型为 ACTION_DOWN 或者 mFirstTouchTarget!=null,若满足,不拦截
点击事件
.....
0 条评论
回复 删除
下一页