因爲觸摸(Touch)而觸發的事件spa
Android的事件:onClick, onScroll, onFling等等,都是由許多個Touch組成的。其中Touch的第一個狀態確定是ACTION_DOWN, 表示按下了屏幕。以後,touch將會有後續事件,多是:事件
ACTION_MOVE //表示爲移動手勢it
ACTION_UP //表示爲離開屏幕io
ACTION_CANCEL //表示取消手勢,不會由用戶產生,而是由程序產生的table
一個Action_DOWN, n個ACTION_MOVE, 1個ACTION_UP,就構成了Android中衆多的事件。class
對於ViewGroup類的控件,有一個很重要的方法,就是onInterceptTouchEvent(),用於處理事件並改變事件的傳遞方向,它的返回值是一個布爾值,決定了Touch事件是否要向它包含的子View繼續傳遞,這個方法是從父View向子View傳遞。程序
而方法onTouchEvent(),用於接收事件並處理,它的返回值也是一個布爾值,決定了事件及後續事件是否繼續向上傳遞,這個方法是從子View向父View傳遞。方法
touch事件在 onInterceptTouchEvent()和onTouchEvent以及各個childView間的傳遞機制徹底取決於onInterceptTouchEvent()和onTouchEvent()的返回值。返回值爲true表示事件被正確接收和處理了,返回值爲false表示事件沒有被處理,將繼續傳遞下去。總結
ACTION_DOWN事件會傳到某個ViewGroup類的onInterceptTouchEvent,若是返回false,則DOWN事件繼續向子ViewGroup類的onInterceptTouchEvent傳遞,若是子View不是ViewGroup類的控件,則傳遞給它的onTouchEvent。touch
若是onInterceptTouchEvent返回了true,則DOWN事件傳遞給它的onTouchEvent,再也不繼續傳遞,而且以後的後續事件也都傳遞給它的onTouchEvent。
若是某View的onTouchEvent返回了false,則DOWN事件繼續向其父ViewGroup類的onTouchEvent傳遞;若是返回了true,則後續事件會直接傳遞給其onTouchEvent繼續處理。(後續事件只會傳遞給對於必要事件ACTION_DOWN返回了true的onTouchEvent)
總結一下就是:onInterceptTouchEvent能夠接受到全部的Touch事件,而onTouchEvent則不必定。