在Android中的View触摸事件处理主要涉及以下三个方法
dispatchTouchEvent() onInterceptTouchEvent() onTouchEvent()View的触摸事件传递,从前到后按照以下顺序
Activity PhoneWindow DecorView 子View他们之间的关系如下
当触摸事件来临时,dispatchTouchEvent()会被调用,它的返回值由onInterceptTouchEvent()和child.dispatchTouchEvent()共同决定 在dispatchTouchEvent()中,onInterceptTouchEvent()会被调用,onInterceptTouchEvent()决定的是当前ViewGroup是否对触摸事件进行拦截,如果返回true,则触摸事件由当前ViewGroup的onTouchEvent()处理,否则触摸事件会被分发到子View,由子View进行处理。 onTouchEvent()中对具体的触摸事件进行处理。他们之间的关系可以用伪代码标示,如下:
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。
查看更多关于Android中View的触摸事件涉及到哪些方法?他们之间有什么关系?的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did129408