一.View事件分发
public boolean dispatchTouchEvent(MotionEvent event) {
if (!onFilterTouchEventForSecurity(event)) {
return false;
}
if (mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED &&
mOnTouchListener.onTouch(this, event)) {
return true;
}
return onTouchEvent(event);
}
即就是dispatchTouchEvent->onTouch->onTouchEvent.
1.在View中,mOnTouchListener的判断是在dispatchTouchEvent的ACTION_DOWN中判断的,如果onTouch返回false或者mOnTouchListener为null(控件没有设置setOnTouchListener方法)或者控件不是enable的情况下会调运onTouchEvent,如果onTouch返回true,onTouchEvent不会被执行因为if里面已经返回true
2.Onclick和onLongClick是在>onTouchEvent中触发的,在ACTION_DOWN中开始算,如果500ms以内ACTION_UP则会触发Onclick不会触发onLongClickListener,如果500ms以后才Up,那么有两种情况:
i.设置了onLongClickListener,且onLongClickListener.onClick返回true,则点击事件OnClick事件无法触发;