Android onClick事件的執行條件

關於Android onClick 事件的執行條件,
一個事件到達一個View上首先會調用,這個View的dispatchTouchEvent(MotionEvent event)事件

if (onFilterTouchEventForSecurity(event)) {
	if ((mViewFlags & ENABLED_MASK) == ENABLED && handleScrollBarDragging(event)) {
		result = true;
	}
	//noinspection SimplifiableIfStatement
	//li.mOnTouchListener 就是我們設置的 
	//btn.setOnTouchListener(new View.OnTouchListener(){
	//	 public boolean onTouch(View v, MotionEvent event) {
    //      return false;
	//	}
	//}); 如果這個方法返回爲true,那麼result的結果就是爲true,此時onTouchEvent 這個方式是得不到執行
	ListenerInfo li = mListenerInfo;
	if (li != null && li.mOnTouchListener != null
			&& (mViewFlags & ENABLED_MASK) == ENABLED
			&& li.mOnTouchListener.onTouch(this, event)) {
		result = true;
	}
	//如果result 的結果爲false,那麼執行onTouchEvent(event),這個方法
	// 在up 事件的時候  有一個 performClick();點擊事件的執行
	//
	if (!result && onTouchEvent(event)) {
		result = true;
	}
}
public boolean onTouchEvent(MotionEvent event) {
	case MotionEvent.ACTION_UP:
		performClick();
		break;

}
//這個調用的就是我們傳遞的View.OnClickListener
 public boolean performClick() {
	li.mOnClickListener.onClick(this);
 }

如果一個控件重寫了OnTouchEvent這個方法,那麼想要執行它的onClick事件
那麼OnTouchEvent的方法的返回值必須爲super.onTouchEvent(event);
否則無法執行

onInterceptTouchEvent 這個方法只有ViewGroup這樣的控件採用,因爲它可以包含子view對象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章