android触摸事件处理流程(2),来来来

本文详细探讨了Android touch事件的传递机制,从Activity到ViewGroup,再到View的层层分发。通过分析源码,阐述了ACTION_DOWN、ACTION_MOVE等事件如何在不同组件间传递,并介绍了在不同情况下事件处理的流程,包括事件的拦截和消费。同时,讨论了当重写onTouchEvent后,如何影响onClick和onLongClick事件的响应,以及在实际应用中的注意事项。
摘要由CSDN通过智能技术生成

Android touch事件传递机制:

我们可以看看android源代码:

Activity.java中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

暂且不管onUserInteraction方法因为它只是一个空方法如果你没实现的话。getWindow().superDispatchTouchEvent(ev)。其中getWindow()返回的是PhoneWindow。

PhoneWindow.java:

此函数调用super.dispatchTouchEvent(event),Activity的rootview是PhoneWindow.DecorView,它继承FrameLayout。通过super.dispatchTouchEvent把touch事件派发给各个Activity的是子view。同时我可以看到,如果子view拦截了事件,则不会执行onTouchEvent函数。

ViewGroup.java中dispatchTouchEvent方法:

由于代码过长这里就不贴出来了,但也知道它返回的是

return target.dispatchTouchEvent(ev);

这里target指的是所分发的目标,可以是它本身,也可以是它的子View。

ViewGroup.java中的onInterceptTouchEvent方法:

默认情况下返回false。即不拦截touch事件。

View.java中的dispatchTouchEvent方法

这里我们很清楚可以知道如果if条件不成立则dispatchTouchEvent的返回值是onTouchEvent的返回值

View.java中的onTouchEvent方法

所以很容易得到触摸事件默认处理流程(以ACTION_DOWN事件为例):

当触摸事件ACTION_DOWN发生之后,先调用Activity中的dispatchTouchEvent函数进行处理,紧接着ACTION_DOWN事件传递给ViewG

  • 24
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值