滑动冲突的补充——Event的流程走向

本文详细解析了Android中View的滑动冲突原理及事件分发流程,包括点下、滑动、松手三个阶段的事件如何在不同控件间流转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、之前分析的滑动冲突,并没有讲述event事件是如何分发到不同的控件

View的滑动冲突

现在分析一下滑动冲突event事件的流向

假设:  我们的一个事件为  点下——>左滑动一次——>松手   这三个为该事件的子事件

点下:

当点击屏幕的时候,点击事件会从Activity层 经过 Window 到 DecoreView,并调用DecoreView的dispatchTouchEvent()方法向下分发。

根据上次的文章,会先分发到HorizonLayout控件中,调用dispatchTouchEvent()方法,根据View的事件分发机制进入到onInterceptTouchEvent()中,根据代码,我们选择不拿到该事件,之后事件会传给下面的ListView,调用子类的onTouchEvent()方法,ListView选择拿到该事件。

滑动一次:

当ListView消耗完成“点下”事件的时候,Android就会发送“滑动一次事件”,步骤同上,调用DecoreView的dispathTouchEvent()方法,然后根据 判断“子类获取到了总事件(因为拿到了ACTION_DOWN事件)” 还是会调用onIntercepTouchEvent(),这时候onInterceptTouchEvent()拿到事件。则调用其onTouchEvent()方法,就代表子类的事件被截取了,则子类就不拿到事件,交给了父类的onTouchEvent()方法,所以这时候父类的onInterceptTouchEvent()也就不会被调用了,直接调用父类的onTouchEvent()方法。

松手:

因为事件被父类的onTouchEvent()截取了,所以最后就是调用父类的onTouchEvent()方法。

转载于:https://www.cnblogs.com/rookiechen/p/5560747.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值