參考,http://blog.csdn.net/chunqiuwei/article/details/41084921
/** * 第一步,dispatchTouchEvent, * false:結束 * true:到onInterceptTouchEvent * 第二步:到onInterceptTouchEvent, * true:到viewGroup的onTouchEvent * false:到View dispatchTouchEvent * 第三步:View dispatchTouchEvent * 第四步:View onTouchEvent * true:view消費touch事件,viewGroup不能消費 * false:viewGroup決定是否消費touch事件 * * * @param ev * @return */
例子原型
MyLinearLayout包含一個MyView
狀況一,
MyLinearLayout,
dispatchTouchEvent返回false
onInterceptTouchEvent返回false
onTouchEvent返回false
MyView
dispatchTouchEvent返回false
onTouchEvent返回false
結果
03-18 15:26:00.726 6884-6884/com.example.myapp D/zyr﹕ A DIS ACTION_DOWN 03-18 15:26:00.726 6884-6884/com.example.myapp D/zyr﹕ A INT ACTION_DOWN 03-18 15:26:00.726 6884-6884/com.example.myapp E/zyr﹕ B DIS ACTION_DOWN 03-18 15:26:00.726 6884-6884/com.example.myapp E/zyr﹕ B TOU ACTION_DOWN 03-18 15:26:00.726 6884-6884/com.example.myapp D/zyr﹕ A TOU ACTION_DOWN 03-18 15:26:05.396 6884-6884/com.example.myapp D/zyr﹕ A DIS ACTION_DOWN 03-18 15:26:05.396 6884-6884/com.example.myapp D/zyr﹕ A INT ACTION_DOWN 03-18 15:26:05.396 6884-6884/com.example.myapp E/zyr﹕ B DIS ACTION_DOWN 03-18 15:26:05.396 6884-6884/com.example.myapp E/zyr﹕ B TOU ACTION_DOWN 03-18 15:26:05.396 6884-6884/com.example.myapp D/zyr﹕ A TOU ACTION_DOWN
結論app
由圖,沒有view消費本次觸摸事件,Action_Move事件根本傳遞不進來
狀況二,spa
MyLinearLayout,
dispatchTouchEvent返回false
onInterceptTouchEvent返回false
onTouchEvent返回false
MyView
dispatchTouchEvent返回false
onTouchEvent返回true
結果.net
03-18 15:36:33.641 10292-10292/com.example.myapp D/zyr﹕ A DIS ACTION_DOWN 03-18 15:36:33.641 10292-10292/com.example.myapp D/zyr﹕ A INT ACTION_DOWN 03-18 15:36:33.641 10292-10292/com.example.myapp E/zyr﹕ B DIS ACTION_DOWN 03-18 15:36:33.641 10292-10292/com.example.myapp E/zyr﹕ B TOU ACTION_DOWN 03-18 15:36:33.676 10292-10292/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE 03-18 15:36:33.676 10292-10292/com.example.myapp D/zyr﹕ A INT ACTION_MOVE 03-18 15:36:33.676 10292-10292/com.example.myapp E/zyr﹕ B DIS ACTION_MOVE 03-18 15:36:33.676 10292-10292/com.example.myapp E/zyr﹕ B TOU ACTION_MOVE 03-18 15:36:33.691 10292-10292/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE 03-18 15:36:33.691 10292-10292/com.example.myapp D/zyr﹕ A INT ACTION_MOVE 03-18 15:36:33.691 10292-10292/com.example.myapp E/zyr﹕ B DIS ACTION_MOVE 03-18 15:36:33.691 10292-10292/com.example.myapp E/zyr﹕ B TOU ACTION_MOVE 03-18 15:36:33.711 10292-10292/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE 03-18 15:36:33.711 10292-10292/com.example.myapp D/zyr﹕ A INT ACTION_MOVE 03-18 15:36:33.711 10292-10292/com.example.myapp E/zyr﹕ B DIS ACTION_MOVE 03-18 15:36:33.711 10292-10292/com.example.myapp E/zyr﹕ B TOU ACTION_MOVE 03-18 15:36:33.721 10292-10292/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE 03-18 15:36:33.721 10292-10292/com.example.myapp D/zyr﹕ A INT ACTION_MOVE 03-18 15:36:33.721 10292-10292/com.example.myapp E/zyr﹕ B DIS ACTION_MOVE 03-18 15:36:33.721 10292-10292/com.example.myapp E/zyr﹕ B TOU ACTION_MOVE 03-18 15:36:33.721 10292-10292/com.example.myapp D/zyr﹕ A DIS ACTION_UP 03-18 15:36:33.721 10292-10292/com.example.myapp D/zyr﹕ A INT ACTION_UP 03-18 15:36:33.721 10292-10292/com.example.myapp E/zyr﹕ B DIS ACTION_UP 03-18 15:36:33.721 10292-10292/com.example.myapp E/zyr﹕ B TOU ACTION_UP
結論code
MyView消費ACTION_DOWN,以後ACTION_MOVE傳遞進來,消費ACTION_MOVE,ACTION_UP同理
狀況三,blog
MyLinearLayout,
dispatchTouchEvent返回false
onInterceptTouchEvent返回false
onTouchEvent返回true
MyView
dispatchTouchEvent返回false
onTouchEvent返回true
結果事件
03-18 15:40:18.056 29163-29163/com.example.myapp D/zyr﹕ A DIS ACTION_DOWN 03-18 15:40:18.056 29163-29163/com.example.myapp D/zyr﹕ A INT ACTION_DOWN 03-18 15:40:18.056 29163-29163/com.example.myapp E/zyr﹕ B DIS ACTION_DOWN 03-18 15:40:18.056 29163-29163/com.example.myapp E/zyr﹕ B TOU ACTION_DOWN 03-18 15:40:18.076 29163-29163/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE 03-18 15:40:18.076 29163-29163/com.example.myapp D/zyr﹕ A INT ACTION_MOVE 03-18 15:40:18.076 29163-29163/com.example.myapp E/zyr﹕ B DIS ACTION_MOVE 03-18 15:40:18.076 29163-29163/com.example.myapp E/zyr﹕ B TOU ACTION_MOVE 03-18 15:40:18.096 29163-29163/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE 03-18 15:40:18.096 29163-29163/com.example.myapp D/zyr﹕ A INT ACTION_MOVE 03-18 15:40:18.096 29163-29163/com.example.myapp E/zyr﹕ B DIS ACTION_MOVE 03-18 15:40:18.096 29163-29163/com.example.myapp E/zyr﹕ B TOU ACTION_MOVE 03-18 15:40:18.111 29163-29163/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE 03-18 15:40:18.111 29163-29163/com.example.myapp D/zyr﹕ A INT ACTION_MOVE 03-18 15:40:18.111 29163-29163/com.example.myapp E/zyr﹕ B DIS ACTION_MOVE 03-18 15:40:18.111 29163-29163/com.example.myapp E/zyr﹕ B TOU ACTION_MOVE 03-18 15:40:18.126 29163-29163/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE 03-18 15:40:18.126 29163-29163/com.example.myapp D/zyr﹕ A INT ACTION_MOVE 03-18 15:40:18.126 29163-29163/com.example.myapp E/zyr﹕ B DIS ACTION_MOVE 03-18 15:40:18.126 29163-29163/com.example.myapp E/zyr﹕ B TOU ACTION_MOVE 03-18 15:40:18.131 29163-29163/com.example.myapp D/zyr﹕ A DIS ACTION_UP 03-18 15:40:18.131 29163-29163/com.example.myapp D/zyr﹕ A INT ACTION_UP 03-18 15:40:18.131 29163-29163/com.example.myapp E/zyr﹕ B DIS ACTION_UP 03-18 15:40:18.131 29163-29163/com.example.myapp E/zyr﹕ B TOU ACTION_UP
結論get
雖然MyLinearLayout的onTouch返回true,可是MyTouch也是返回true,因爲安卓觸摸事件傳遞是由上而下,可是消費觸摸事件是由下而上的,因此處於下面的MyView消費掉了觸摸事件,MyLinearLayout沒法消費
狀況四,原型
研究onInterceptTouchEventio
MyLinearLayout,
dispatchTouchEvent返回false
onInterceptTouchEvent返回true
onTouchEvent返回false
MyView
dispatchTouchEvent返回false
onTouchEvent返回true
結果class
03-18 15:44:37.701 20477-20477/com.example.myapp D/zyr﹕ A DIS ACTION_DOWN 03-18 15:44:37.701 20477-20477/com.example.myapp D/zyr﹕ A INT ACTION_DOWN 03-18 15:44:37.701 20477-20477/com.example.myapp D/zyr﹕ A TOU ACTION_DOWN
結論
雖然MyView的onTouch返回true,可是被MyLinearLayout攔截下來了(MyLinearLayout的onInterceptTouchEvent返回true),可是MyLinearLayout的onTouch返回false,即它並無消費這次觸摸事件,so,,,這次觸摸事件就此結束,固然Action_Move是沒有機會傳遞拉.
狀況五,
MyLinearLayout, dispatchTouchEvent返回false onInterceptTouchEvent ACTION_DOWN,false ACTION_MOVE,true ACTION_UP,false onTouchEvent ACTION_DOWN,false ACTION_MOVE,true ACTION_UP,false MyView dispatchTouchEvent返回false onTouchEvent返回true
結果
03-18 16:09:36.241 8257-8257/com.example.myapp D/zyr﹕ A DIS ACTION_DOWN 03-18 16:09:36.241 8257-8257/com.example.myapp D/zyr﹕ A INT ACTION_DOWN 03-18 16:09:36.241 8257-8257/com.example.myapp E/zyr﹕ B DIS ACTION_DOWN 03-18 16:09:36.241 8257-8257/com.example.myapp E/zyr﹕ B TOU ACTION_DOWN 03-18 16:09:36.271 8257-8257/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE 03-18 16:09:36.271 8257-8257/com.example.myapp D/zyr﹕ A INT ACTION_MOVE 03-18 16:09:36.296 8257-8257/com.example.myapp D/zyr﹕ A DIS ACTION_MOVE 03-18 16:09:36.296 8257-8257/com.example.myapp D/zyr﹕ A TOU ACTION_MOVE 03-18 16:09:36.296 8257-8257/com.example.myapp D/zyr﹕ A DIS ACTION_UP 03-18 16:09:36.296 8257-8257/com.example.myapp D/zyr﹕ A TOU ACTION_UP
結論
試着本身分析把.