一直想弄清楚onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent的執行順序,以及內部使用switch (event.getAction())中的執行順序。趁這次機會趕緊弄清楚。 重寫上面幾個方法後。我們在LogCat中看看列印的結果。 一.isO ...
一直想弄清楚onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent的執行順序,以及內部使用switch (event.getAction())中的執行順序。趁這次機會趕緊弄清楚。
public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); Log.e(TAG, "onTouchEvent"); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: Log.e(TAG, "onTouchEvent_ACTION_DOWN"); break; case MotionEvent.ACTION_MOVE: Log.e(TAG, "onTouchEvent_ACTION_MOVE"); break; case MotionEvent.ACTION_UP: Log.e(TAG, "onTouchEvent_ACTION_UP"); break; default: break; } Log.e(TAG, "onTouchEvent_return"); return isOnTouchEvent; } @Override public boolean onInterceptTouchEvent(MotionEvent event) { Log.e(TAG, "onInterceptTouchEvent"); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: Log.e(TAG, "onInterceptTouchEvent_ACTION_DOWN"); break; case MotionEvent.ACTION_MOVE: Log.e(TAG, "onInterceptTouchEvent_ACTION_MOVE"); break; case MotionEvent.ACTION_UP: Log.e(TAG, "onInterceptTouchEvent_ACTION_UP"); break; default: break; } Log.e(TAG, "onInterceptTouchEvent_return"); return isOnInterceptTouchEvent; } @Override public boolean dispatchTouchEvent(MotionEvent event) { super.dispatchTouchEvent(event); Log.e(TAG, "dispatchTouchEvent"); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: Log.e(TAG, "dispatchTouchEvent_ACTION_DOWN"); break; case MotionEvent.ACTION_MOVE: Log.e(TAG, "dispatchTouchEvent_ACTION_MOVE"); break; case MotionEvent.ACTION_UP: Log.e(TAG, "dispatchTouchEvent_ACTION_UP"); break; default: break; } Log.e(TAG, "dispatchTouchEvent_return"); return isDispatchTouchEvent; }
重寫上面幾個方法後。我們在LogCat中看看列印的結果。
一.isOnInterceptTouchEvent==true時。
1.isOnTouchEvent==true,isDispatchTouchEvent==true。
因為onInterceptTouchEvent返回true,這說明要攔截此事件,因此在同一個事件序列中該方法不會再次被調用。下同。
2.isOnTouchEvent==true,isDispatchTouchEvent==false。
3.isOnTouchEvent==false,isDispatchTouchEvent==true。
4.isOnTouchEvent==false,isDispatchTouchEvent==false。
二.如果isOnInterceptTouchEvent==false。
1.isOnTouchEvent==true,isDispatchTouchEvent==true。
因為onInterceptTouchEvent返回tfalse,這說明不攔截此事件,因此不調用onTouchEvent。下同。
2.isOnTouchEvent==true,isDispatchTouchEvent==false。
3.isOnTouchEvent==false,isDispatchTouchEvent==true。
4.isOnTouchEvent==false,isDispatchTouchEvent==false。