• MotionEvent
    MotionEvent是View的动作事件参数,包含集中常见的时间类型:
  1. ACTION_DOWN:手指刚接触到屏幕时;
  2. ACTION_MOVE:手指在屏幕上移动;
  3. ACTION_UP:手指从屏幕上离开的瞬间;
    MotionEvent的两组位置方式:
    getX()/getY():表示动作相对于View左上角位置的x、y坐标;
    getRawX()/getRawY():表示动作相对于屏幕左上角位置的x、y坐标;
  • 事件分发
    public boolean dispatchTouchEvent(MotionEvent event)
    用于事件的分发,如果时间传递到了当前的View,那么该方法一定会被调用,boolean类型的返回值受View的onTouchEvent(MotionEvent event)和其子View的dispatchTouchEvent(MotionEvnet event)的影响,返回true表示消耗当前时间。
    public boolean onInterceptTouchEvent(MotionEvent event)
    用来判断是否拦截当前事件,返回结果表示是否拦截当前事件。
    public boolean onTouchEvent(MotionEvent event)
    在dispatchTouchEvent方法中被调用,用来处理touch事件,返回结果表示是否消耗当前事件。


说明:

  1. 一个事件序列表示手指从接触屏幕(ACTION_DOWN)经历一些列动作事件到手指刚离开屏幕(ACTION_UP)。
  2. 某个View拦截事件,那么接下来的一个事件序列都有它来处理(时间能到到达的情况下),并且它的onIntercept不会再被调用。
  3. 如果View再处理事件过程中,不再消耗ACTION_DOWN事件(onTouch返回false),那么事件序列的其他事件将会被其父元素进行消耗。
  4. ViewGroup默认不拦截事件。
  5. VIew没有onInterveptTouchEvent方法,View默认的onTouchEvent都会消耗事件(默认返回true)。
  6. 事件传递是由外向内的,即事件总是先传递给父元素,然后通过父元素分发给子View,通过requestDisallowInterceptTouchEvnet方法来干预父元素的事件分发过程,但是ACTION_DOWN事件除外。