Android中View的触摸事件涉及到哪些方法?他们之间有什么关系?

1619次阅读  |  发布于5年以前

Android中View的触摸事件涉及到哪些方法?他们之间有什么关系?

在Android中的View触摸事件处理主要涉及以下三个方法

View的触摸事件传递,从前到后按照以下顺序

  1. Activity
  2. PhoneWindow
  3. DecorView
  4. 子View

他们之间的关系如下

他们之间的关系可以用伪代码标示,如下:

public boolean dispatchTouchEvent(MotionEvent ev) {
    boolean consume = false;
    if (onInterceptTouchEvent(ev)) {
        consume = onTouchEvent(ev);
    } else {
        consume = child.dispatchTouchEvent(ev);
    }
    return consume;
}

另外,ViewGroup.onInterceptTouchEvent()默认返回false,即对触摸事件不进行拦截,都会分发到子View。

如果View设置了onTouchListener(),则onTouchListener()的处理在onTouchEvent()之前,如果onTouchListener()返回true,则View.onTouchEvent()不会被调用,即onTouchListener()的优先权高于onTouchEvent()

Android中默认认为View是消耗onTouchEvent()的,即返回值为true,除非它是不可点击的,即clickable和longClickable都为false。

Copyright© 2013-2019

京ICP备2023019179号-2