最显著的区别为onTouchListener的接口的优先级是要高于onTouchEvent
也就是说,如果ontouchlistener中的ontouch方法返回了true,就说明本次的触摸事件已经被消费了。比ontouchlistener优先级低的ontouchevent就收不到消息。
同理,button的click事件是通过ontouchevent实现的,当在ontouchlistener监听返回true后,也就意味着button的点击事件失效。
例如,Google中对于dispatchTouchEvent的实现:
public boolean dispatchTouchEvent(MotionEvent event){
... ...
if(onFilterTouchEventForSecurity(event)){
ListenerInfo li = mListenerInfo;
if(li != null && li.mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED
&& li.mOnTouchListener.onTouch(this, event)) {
return true;
}
if(onTouchEvent(event)){
return true;
}
}
... ...
return false;
}