Android的事件分发机制 笔记

Andorid系统SDK有一个抽象类叫做Window本意是窗口视图 目前只有一个PhoneWindow实现了这个类

PhoneWindow:将DecorView设置为整个应用窗口的根View

DecorView:根视图 把内容显示到PhoneWindow上面

也就是说一个activity 包含一个实现window的PhoneWindow  以及一个DecorView,应用层开发的所有控件都是添加到该视图中

从手指点击到屏幕上开始 事件是这样传递的 Activity--ViewGroup--View

拦截和处理操作都在这三个方法

dispatchTouchEvent:表示是否拦截事件 默认false 不拦截
onInterceptTouchEvent:该方法只存在于ViewGroup  是否拦截该事件继续向下传递
onTouchEvent:处理手指在屏幕上的的ACTION_DOWN ACTION_MOVE ACTION_UP事件

假如一个activity有一个layout根布局  布局里面有一个view 当手指点击view 默认的话都是调用父类的false

那么事件的传递顺序就是

Activity dispatchTouchEvent ->ViewGroup dispatchTouchEvent ->ViewGroup onInterceptTouchEvent -> View dispatchTouchEvent ->View onTouchEvent-> ViewGroup onTouchEvent->Activity onTouchEvent-> 然后循环Activity dispatchTouchEvent->Activity onTouchEvent

如果在三个传递过程中dispatchTouchEvent 返回了true事件就被消费了 不在往下传递

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值