1. 程式人生 > >android觸控事件傳遞機制

android觸控事件傳遞機制

看到一篇文章,將事件傳遞機制講得很透徹

【場景】

在cy的Home頁,每個點選塊都是自定義view來做的,組要用自定義自合view,如果需要將其中點選image和text分別有不同的反應,則應該去設定處理事件?

【詳情】

Android系統中的每個View的子類都具有下面三個和TouchEvent處理密切相關的方法:
1)public boolean dispatchTouchEvent(MotionEvent ev)  這個方法用來分發TouchEvent
2)public boolean onInterceptTouchEvent(MotionEvent ev) 這個方法用來攔截TouchEvent


3)public boolean onTouchEvent(MotionEvent ev) 這個方法用來處理TouchEvent


當 TouchEvent發生時,首先Activity將TouchEvent事件通過dispatchTouchEvent方法傳遞給ViewGroup

注:以下所說的子view和父view均是包含關係,不是繼承關係
1,ViewGroup通過dispatchTouchEvent方法傳遞給interceptTouchEvent
    (1)如果返回true ,則交給這個ViewGroup的onTouchEvent處理。
    (2)如果返回false,則交給子View的 dispatchTouchEvent

方法處理。
2,事件傳遞到子view 的 dispatchTouchEvent方法中,通過方法傳遞到當前View的onTouchEvent方法中

    (1)如果返回true,那麼這個事件就會止於該view。
    (2)如果返回 false ,那麼這個事件會從這個子view 往上傳遞,而且都是傳遞到父View的onTouchEvent 來接收。

    (3)如果傳遞到ViewGroup的 onTouchEvent 也返回 false 的話,則繼續傳遞到Activity的onTouchEvent中,如果還是false,則這個事件就會“消失“;事件向上傳遞到中間的任何onTouchEvent方法中,如果返回true,則事件被消費掉,不會再傳遞

http://blog.csdn.net/liyuchong2537631/article/details/48463169

這篇文字還解讀了ontouch-》onlongclick->onclick的事件順序