1.
- ean dispatchTouchEvent(MotionEvent event) {
- if (!onFilterTouchEventForSecurity(event)) {
- return false;
- }
- if (mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED &&
- mOnTouchListener.onTouch(this, event)) {
- return true;
- }
- return onTouchEvent(event);
执行顺序:
View.dispatchEvent->View.setOnTouchListener->View.onTouchEvent
在dispatchTouchEvent中会进行OnTouchListener的判断,如果OnTouchListener不为null且返回true,则表示事件被消费,onTouchEvent不会被执行;否则执行onTouchEvent。
2.
onTouchEvent中方法:
//如果为可点击的或者可长点击的view,一定返回true
if (((viewFlags & CLICKABLE) == CLICKABLE ||
(viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)) {
//...switch(...)
return true;
(viewFlags & LONG_CLICKABLE) == LONG_CLICKABLE)) {
//...switch(...)
return true;
}
switch:
case : DOWN LongClick
case : MOVE
case : UP 设置了onLongClickListener,且onLongClickListener.onClick返回true,则点击事件OnClick事件无法触发;
没有设置onLongClickListener或者
onLongClickListener.onClick
返回false,
则
点击事件OnClick事件依然可以触发;