android 对于事件的分发,拦截,捕获再次思考总结

本文详细解析了Android事件处理机制,包括事件如何从Activity窗口的DecorView传递到ViewGroup及View,介绍了dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent等关键方法的作用及事件流转过程。

我们知道android事件处理机制通常这样处理,先从activity 窗口的decorview -->viewGroup .....->view,一般会用到下面几个方法:

1、在ViewGroup中,事件分为dispatchTouchEvent(事件的分发),onInterceptTouchEvent(事件的拦截),onTouchEvent(事件的处理)。

2、在View中,事件分为dispatchTouchEvent(事件的分发),onTouchEvent(事件的处理)。

3、在Activity中,事件分为dispatchTouchEvent(事件的分发),onTouchEvent(事件的处理)。

事件流转通过下图更清楚的表达出来:

 

图解:其中GroupA,GroupB为派生viewgroup子类 ,MyView 为View子类 ,其中GroupB onInterceptTouchEvent 返回true进行拦截消息,

GroupB onTouchEvent 消费事件 后返回true,ACTION_DOW,ACTION_MOVE,ACTION_UP事件流向如下:

1.ACTION_DOW: 从activity消息分发向下到GroupB 被拦截后不再向Myview传递事件 ,GroupB onTouchEvent 方法消费事件后结束.

2.ACTION_MOVE,ACTION_UP: 向下分发事件到GoupB,不再通过该控件的onIterceptTouchEvent 而是直接传递到该控件的onTouchEvent方法处理,事件也不再向上提交.

 

备注:方法requestDisallowInterceptTouchEvent可以用于控制控件的拦截设置.附图:

 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值