天天看點

android手勢類事件響應

android的螢幕手勢事件的響應大概經過如下幾個步驟:

   首先,android系統将事件傳遞給Activity.dispatchTouchEvent(MotionEvent e)方法,由該方法進行分發給各個根view,所謂的根view即布局管理器Layout,分發給布局管理器的Layout.dispatchTouchEvent(MotionEvent e)方法,

   然後又該方法繼續分發給各個子視圖。接着傳遞到Layout方法中的onInterceptToucheEvent(MotionEvent e),該方法為事件攔截器,若傳回的值為true,表示攔截該事件,Layout中的元件将接受不到任何事件,事件直接傳遞給                            onTouchEvent(MotionEvent e)接口中處理,若傳回false,表示不攔截,Layout中的元件将接受到事件。

注意,此時交給onTouchEvent處理,若傳回值為false時,該方法隻處理第一個事件,後續的事件将不再處理,例如:我在螢幕上點選一個,産生Action_Down,Action_up,Action_onSingleTapUp三個事件,則onTouchEvent隻處理Action_Down事件,後面的兩個忽略。若傳回值為true時,所有事件都會處理。因為onTouchEvent方法處理事件比較簡單,是以android增加了一個手勢類GestureDetector,

該類的構造方法接收一個SimpleOnGestureListener的對象,該對象實作了GestureDetector.OnGestureListener接口和GestureDetector.OnDoubleListener接口,其實所謂的實作其實方法中什麼都沒有做,這個由程式員自己完成相應的操作。

程式員實作接口後,執行個體化一個SimpleOnGestureListener對象作為參數傳遞給GestureDetector,然後在onTouchEvent方法中調用GestureDetector.onTouchEvent()方法,就可以處理不同的事件了。

還應該注意的是:通過GestureDetector.onTouchEvent()方法的傳回值,可以獲得你的手勢的具體形式,這是通過修改GestureDetector.OnGestureListener接口中的各種處理事件的方法實作的。例如:OnGestureListener.onDown(),OnGestureListener.onScroll().OnGestureListener.onSingleTapUp(),OnGestureListener.onFling()。

各自的傳回值即作為GestureDetector.onTouchEvent()方法的傳回值。

注意:onInterceptTouchEvent方法是自上而下攔截事件,true為攔截,false為不攔截

           當注冊了監聽onTouch()後,不再調用自身的onTouchEvent()方法。

           當沒有注冊監聽onTouch(),調用自身的onTouchEvent方法,傳回值為false則進一步往上面傳遞事件,傳回值為true時,不将事件往上傳遞

     是以,onInterceptTouchEvent是控制事件往下傳遞,onTouchEvent()是控制事件向上傳遞的。

繼續閱讀