从源码分析
首先被执行的是dispatchTouchEvent()方法
//noinspection SimplifiableIfStatement
ListenerInfo li = mListenerInfo;
if (li != null && li.mOnTouchListener != null
&& (mViewFlags & ENABLED_MASK) == ENABLED
&& li.mOnTouchListener.onTouch(this, event)) {
result = true;
}
if (!result && onTouchEvent(event)) {
result = true;
}
}
上面这段代码截取dispatchTouchEvent中的核心代码,这几句话足够分析了。首先ListenerInfo这个类保存了时间的各种监听信息。ouTouchListener就是其中的一个属性,代表此view是否设置touchlistener当设置了此监听的时候,首先调用此监听的ontouch方法,当此方法返回false时,会调用view本身对触摸的处理onTouchEvent
此时大家肯定会疑问为什么没有onclicklistener的处理,当我们点进TouchEvent时会发现在此方法调用onclick方法,所以当我们的ontouch方法返回true,那么就不会执行onTouchEvent也就代表不会执行onclick方法,onclick方法在up时响应