dispatchTouchEvent,onUserInteraction,onTouchEvent 調用時序


 

  • 一、只有一個Activity時:一次拇指點擊事件(包括ACTION_DOWN,ACTION_UP),調用時序如下:

  1. dispatchTouchEvent

  2. onUserInteraction

  3. onTouchEvent (ACTION_DOWN)

  4. dispatchTouchEvent 

  5. onTouchEvent (ACTION_UP,不會觸發onUserInteraction)

 

  •  二、只有一個Activity,當鍵盤鍵按下時,時序如下

  1. dispatchKeyEvent

  2. onUserInteraction

  3. onKeyDown

  4. dispatchKeyEvent

  5. onUserInteraction

  6. onKeyUp (注意與觸摸不同,當松開按鍵時onUserInteraction也會觸發。)

  • 三、Activity里有一個Layout,在Layout里有個按鈕。一次拇指觸摸點擊事件(包括ACTION_DOWN,ACTION_UP),方法邏輯順序如下:

  1. Activity的dispatchTouchEvent

  2. Activity的onUserInteraction

  3. Layout的dispatchTouchEvent

  4. Layout的onInterceptTouchEvent

  5. Button的onTouchEvent(ACTION_DOWN)

緊跟着是一個ACTION_UP事件

  1. Activity的dispatchTouchEvent(不觸發Activity的onUserInteraction,它對ACTION_UP不起作用。)

  2. Layout的dispatchTouchEvent

  3. Layout的onInterceptTouchEvent

  4. Button的onTouchEvent

  5. Button的onClick

如果在onTouchEvent里返回true,消費了該事件,那么onClick將不會被響應。

但是如果不寫onClick事件,而onTouchEvent事件返回false,也沒有上述時序中的最后一步,其他時序即事件不會再向上傳遞,估計是onClick有默認響應不處理,而onClick不會有返回值。但是如果是繼承了一個View而且又覆寫了onTouchEvent,若返回false,那么觸控會向上傳遞。

時序如下

  1. Activity的dispatchTouchEvent

  2. Activity的onUserInteraction

  3. Layout的dispatchTouchEvent

  4. Layout的onInterceptTouchEvent

  5. Button的onTouchEvent (ACTION_DOWN)

  6. Layout的onTouchEvent (ACTION_DOWN)

緊跟着是一個ACTION_UP事件

  1. Activity的dispatchTouchEvent(不觸發Activity的onUserInteraction,它對ACTION_UP不起作用。)

  2. Layout的dispatchTouchEvent

  3. Layout的onInterceptTouchEvent

  4. Button的onTouchEvent

onClick事件不再發生。

  •  對於鍵盤監聽

VIEW和Activity本身都有相應鍵盤事件的ONKEYUP和ONKEYDOWN

對於VIEW,可以setOnKeyListener監聽鍵盤事件,如果既對VIEW寫了上述偵聽,又覆寫了ONKEYUP,DOWN事件,那么首先進入ONKEYDOWN,UP。

 

REFERENCES:http://lexhsu.lofter.com/post/3f493_1f3348

http://blog.csdn.net/wangtao4226/article/details/6868587

http://blog.csdn.net/ritterliu/article/details/7610486

 

http://www.cnblogs.com/jqyp/archive/2012/04/25/2469758.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM