美文网首页
Android 触摸事件传递机制(一)

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

作者: BlingBest | 来源:发表于2018-12-25 14:41 被阅读38次

    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两个方法

    相关文章

      网友评论

          本文标题:Android 触摸事件传递机制(一)

          本文链接:https://www.haomeiwen.com/subject/jfrflqtx.html