您的位置:首页 > 其它

touch分发

2015-08-17 11:58 375 查看
子View

?
ViewGroup LinearLayout:



?
xml

?
一、

是否調用super

return

dispatchTouchEvent

true

onInterceptTouchEvent

super

true

onTouchEvent

super

true





二、

是否調用super

return

dispatchTouchEvent

false

onInterceptTouchEvent

super

true

onTouchEvent

super

true





也就是說如果dispatchTouchEvent返回的是false,就不在接收接下來一系列觸摸事件的處理了。而且沒調用super,也不會將event傳遞到另外兩個方法。

三、

是否調用super

return

dispatchTouchEvent

super

true

onInterceptTouchEvent

super

true

onTouchEvent

super

true





调用了 dispatchTouchEvent方法中调用了 super.dispatchTouchEvent()后,另外的两个方法才得以调用。

其中只 dispatchTouchEvent return false:





同樣的不會處理down之後的事件,但是會將其給後面的兩個方法。

其中只 onInterceptTouchEvent return false





四、在ViewGroup中添加子View,並且設置了onClick之後:

1)


是否調用super

return

dispatchTouchEvent

super

false

onInterceptTouchEvent

super

false

onTouchEvent

super

false





只接收down事件。之後的就不會再接收了。也就沒有點擊事件的處理情況,因為點擊的處理實在up之後進行的

2)

1、

dispatchTouchEvent return true:

onInterceptTouchEvent return false:

onTouchEvent return false;







2、

dispatchTouchEvent return true:

onInterceptTouchEvent return true:

onTouchEvent return false;









可以看到事件沒有分發給子view,這時如果LinearLayout也有觸摸的處理事件的話,比如Click那麼:









也就是說,LinearLayout會響應點擊事件



3、

dispatchTouchEvent return true:

onInterceptTouchEvent return false:

onTouchEvent return false;









相比較2例子而言,如果onInterceptTouchEvent return 的是false 那麼會先向下傳遞,最終TextView會得到事件的最終處理權。



4、

dispatchTouchEvent return true:

onInterceptTouchEvent return false:

onTouchEvent return true;











可見向下傳遞後,子View處理完Click事件後,點擊事件已經消耗,所以LinearLayout不會在有點擊事件的響應。



5、

dispatchTouchEvent return true:

onInterceptTouchEvent return true:

onTouchEvent return true;











反正不會再向下傳遞,子view獲取不到事件了,所以onTouchEvent返回什麼就沒什麼大的關係了。

上面的例子都是子View的onTouchEvent return super.onTouchEvent(event); 下面我們手動的改一下讓他return false or true

6、子view onTouchEvent return 的是false

dispatchTouchEvent return true:

onInterceptTouchEvent return false:

onTouchEvent return true;//false







執行了Activity中LinearLayout的點擊事件

7、子view onTouchEvent return 的是true

dispatchTouchEvent return true:

onInterceptTouchEvent return false:

onTouchEvent return true;//false







沒有執行Activity中TextView的點擊事件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: