android事件分发机制
来源:互联网 发布:linux基础试题 编辑:程序博客网 时间:2024/05/29 10:26
这是我的第一个博客,同时也作为一个安卓程序员,希望自己能够坚持下去学习,成长。
而且因为View是树形结构,在多层重叠的,当点击到多层重叠的View上面时,就需要事件分发机制。
而从中可以得到一个View结构:
而从这里,可以发现,我们每次触摸屏幕时,事件是从PhoneWindow传递下来的。
PhoneWindow是继承自Window,一个抽象类,而PhoneWindow则是Window类的唯一实现类。Window类是所有视图最顶层的容器,管理视图的外观和行为。
而DecorView是PhoneWindw的一个内部类,作用是负责消息的传递。
事件的分发、拦截与消费
事件分发流程:
Activity -> PhoneWindow -> DecorView -> ViewGroup -> View
如果对事件没有处理,则回传。
View -> ViewGroup -> DecorView -> PhoneWindow -> Activity
注意:事件分发机制中,如果View没有处理事件,则给父View返回一个false值,父View则根据返回值来调用自身的onTouchEvent。
ViewGroup是根据onInterceptTouchEvent返回值来确定调用子View的dispaTouchEvent还是自身的onTouchEvent,并没有将调用交给onInterceptTouchEvent。
事件被消费掉则意味着消息传递的结束。上层不再处理。
触摸事件
每次点击、长按、移动都是一个事件,这些事件被封装成MotionEvent。
有四种事件:ACTION_DOWN: 手指初次接触到屏幕时触发。
ACTION_MOVE: 手指在屏幕上滑动时触发。
ACTION_UP: 手指离开屏幕时触发。
ACTION_CANCEL: 事件被上层拦截时触发。
对于一般流程:
手指落下(ACTION_DOWN) ——> 移动(ACTION_MOVE)——>离开(ACTION_UP)
对于单次点击,只有ACTION_DOWN ——> ACTION_UP
参考自:http://www.gcssloop.com/customview/dispatch-toucheve
http://www.gcssloop.com/customview/dispatch-touchevent-sourcent-theory
- android事件分发机制
- Android事件分发机制
- Android 事件分发机制
- Android事件分发机制
- Android 事件分发机制
- Android 事件分发机制
- android 事件分发机制
- Android事件分发机制
- android 事件分发机制
- android事件分发机制
- Android 事件分发机制
- android事件分发机制
- android 事件分发机制
- android 事件分发机制
- Android 事件分发机制
- Android事件分发机制
- Android事件分发机制
- Android 事件分发机制
- [DP套DP] UOJ#141. 【UER #4】量子态的棋盘
- android布局控件flex-layout
- HDU1808&&POJ3370-Halloween treats
- 关于copy协议中如何简便的为对象赋值
- 洛谷P2766 最长递增子序列问题
- android事件分发机制
- 微信开发环境配置以及开发基础PHP简单说明
- MAC中MySQL启动失败的解决方法
- 2M字节Flash Rom存储器W25Q16/W25X16 认识Flash
- 接近假期,该去哪里
- python自然语言处理环境安装(centOS)
- 声明一个变量
- AsyncTask+httpurl
- 很全的php数组操作方法