Android 触摸事件传递机制(一)

2018-12-25  本文已影响38人  BlingBest

1  触摸事件的类型


触摸事件对应的是MotionEvent类,事件的类型主要有如下三种

ACTION_DOWN:用户手指的按下操作,一次按下操作标志着一次触摸事件的开始。

ACTION_MOVE:用户手指按压屏幕后,在松开之前,如果移动的距离超过一定的阈值,那么会被判定为ACTION_ MOVE操作

ACTION_UP:用户手指离开屏幕的操作,一次抬起标志着一次触摸事件的结束

2 事件传递的三个阶段


分发(Dispatch):事件的分发对应着dispatchTouchEvent方法,在Android系统中,所有的触摸事件都是通过这个方法来分发的,方法原型如下:

         在这个方法中,根据当前视图的具体实现逻辑,来决定是直接消费这个事件还是将事件继续分发给子视图,方法返回值为true表示事件被当前视图消费掉,不在继续分发事件,方法返回值为super.dispatchTouchEvent表示继续分发该事件,如果当前视图是ViewGroup及其子类,则会调用onInterceptTouchEvent方法表示是否拦截该事件。

拦截(Intercept):事件的拦截对应着onInterceptTouchEvent方法,这个方法只在ViewGroup及其子类才存在,在View和Activity中是不存在的,方法原型如下:

         这个方法也是通过返回的布尔值来决定是否拦截对应的事件,根据具体的实现逻辑,返回true表示拦截这个事件,不继续分发给子视图,同时交由自身的onTouchEvent方法进行消费,返回false或者super.onInterceptTouchEvent表示不对事件进行拦截,需要继续传递给子视图。

消费(Consume):事件的消费对应着onTouchEvent方法,方法原型如下:

         该方法返回值为true表示当前视图可以处理对应的事件,事件将不会向上传递给父视图,返回值为false表示当前视图不处理这个事件,事件会被传递给父视图的onTouchEvent方法进行处理。在Android系统中,拥有事件传递处理能力的类有以下三种

Activity:拥有dispatchTouchEvent和onTouchEvent两个方法

ViewGroup:拥有dispatchTouchEvent,onIntercepTouchEvent和onTouchEvent三个方法

View:拥有dispatchTouchEvent 和onTouchEvent两个方法

上一篇下一篇

猜你喜欢

热点阅读