Android笔记--整理我所理解的Touch 事件分发机制

1、Android 中与 Touch 事件相关的方法有:dispatchTouchEvent(MotionEvent event)、onInterceptTouchEvent(MotionEvent event)、onTouchEvent(MotionEvent event)。其中参数event为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息,例如触摸的位置、触摸的类型以及触摸的时间等。该对象会在用户触摸手机屏幕时被创建。

2、dispatchTouchEvent(MotionEvent event)主要用来分发事件,函数主要作用是来决定当前的事件是交由自己消费处理,还是交由子控件处理。

其中“分发”是指一个触摸或点击的事件发生,分发给当前触摸控件所监听的事件(如OnClick、onTouch等),进而来决定是控件的哪个函数来响应此次事件。

3、onInterceptTouchEvent(MotionEvent event)主要来决定当前控件是否需要拦截传递给子控件,如果返回True表示该控件拦截,并交由自己父类的dispatchTouchEvent处理消费,如果返回false表示不拦截,允许传递给子控件处理。

4、onTouchEvent(MotionEvent event) 此函数负责执行事件的处理,负责处理事件,主要处理MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE 、MotionEvent.ACTION_UP这三个事件。

5、一次完整的Touch事件,应该是由一个Down、一个或零个Up和若干个Move组成的。

6、当触摸一个View控件,

首先会调用这个dispatchTouchEvent(MotionEvent event)函数中的onTouch方法,

然后判断三个条件:判断View控件是否注册了OnTouchListener对象的监听、判断View控件是否能被点击、判断回调注册在View控件上的mOnTouchListener对象的onTouch方法返回值,

如果三个条件都返回真,那么dispatchTouchEvent返回真,Touch事件会分发给当前 View 由 dispatchTouchEvent 方法进行处理,同时事件会停止向下传递;返回假,Touch事件返回给 Activity 的 onTouchEvent 处理或者父 View 的  onTouchEvent 进行处理。

就是当dispatchTouchEvent(MotionEvent event)在进行事件分发的时候,只有前一个action返回true,才会触发后一个action。

7、mOnTouchListener对象的onTouch(this, event)这个判断很重要,决定能否回调OnClickListener接口的onClick函数。进而执行用户自定义代码。

你可能感兴趣的:(Android,View事件的分发机制,Touch,事件分析,onTouchEvent)