dispatchTouchEvent源码解析

本文深入解析Android事件分发流程,从dispatchTouchEvent开始,探讨事件如何在Activity、ViewGroup及View之间传递。重点讲解onInterceptTouchEvent在ViewGroup中的拦截作用以及onTouchEvent在事件处理中的关键角色。了解Android中事件处理的顺序和机制。
摘要由CSDN通过智能技术生成

1. dispatchTouchEvent是处理触摸事件分发,Android中所有的事件都必须经过这个方法的分发,然后决定是自身消费当前事件还是继续往下分发给子控件处理。返回true表示不继续分发,事件没有被消费。返回false则继续往下分发,如果是ViewGroup则分发给onInterceptTouchEvent进行判断是否拦截该事件,事件(多数情况)是从Activity的dispatchTouchEvent开始的。执行dispatchTouchEvent(ev),事件向下分发。


2. onInterceptTouchEvent是ViewGroup中才有的方法,View中没有,它的作用是负责事件的拦截,返回true的时候表示拦截当前事件,不继续往下分发,交给自身的onTouchEvent进行处理。返回false则不拦截,继续往下传。这是ViewGroup特有的方法,因为ViewGroup中可能还有子View,而在Android中View中是不能再包含子View的(iOS可以)


3. onTouchEvent是View中提供的方法,ViewGroup也有这个方法,view中不提供onInterceptTouchEvent。view中默认返回true,表示消费了这个事件,onTouchEvent方法用于事件的处理,返回true表示消费处理当前事件,返回false则不处理,交给子控件进行继续分发。

 

知识点:

1.Android中事件传递按照从上到下进行层级传递,事件处理从Activity开始到ViewGroup再到View。


2.事件传递方法包括dispatchTouchEvent、onTouchEvent、onInterceptTouchEvent,其中前两个是View和ViewGroup都有的,最后一个是只有ViewGroup才有的方法。这三个方法的作用分别是负责事件分发、事件处理、事件拦截。


3.onTouch事件要先于onClick事件执行,onTouch在事件分发方法dispatchTouchEvent中调用,而onClick在事件处理方法onTouchEvent中被调用,onTouchEvent要后于dispatchTouchEvent方法的调用。


代码分析:

import android.view.MotionEvent;  
import android.view.View;  
   
public class ZeroDispatchTouchEvent {  
    /** 
     * dispatchTouchEvent()源码学习及其注释 
     * 常说事件传递中的流程是:dispatchTouchEvent->onInterceptTouchEvent->onTouchEvent 
     * 在这个链条中dispatchTouchEvent()是处在链首的位置当然也是最重要的. 
     * 在dispatchTouchEvent()决定了Touch事件是由自己的onTouchEvent()处理 
     * 还是分发给子View处理让子View调用其自身的dispatchTouchEvent()处理. 
     *  
     *
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值