2017-09-12 87 views
1

如何攔截活動中的所有觸摸事件並檢測事件的使用者?爲了簡化,讓我們假設我必須記錄所有這樣的事件:ImageView -> onLongClick()如何攔截所有觸摸事件並檢測其消費者

實際的問題,實際上是檢測事件的消費者 - 攔截所有的事件,我可以在活動視圖頂部添加疊加,或在活動覆蓋dispatchTouchEvent(MotionEvent),但我不知道如何檢測這些事件的消費者。

回答

0

如果您在活動中重寫dispatchTouchEvent,那意味着所有事件都將被Activity攔截。

此活動中的任何視圖都不會收到任何消息,因爲您已經使用它。

我不知道你爲什麼想這樣做,但如果你想學習或什麼,你可以讀一些關於android視圖事件。

+0

不正確,如果我將重寫'dispatchTouchEvent'並在其內部調用超級實現,則孩子將像以前那樣獲得事件,並且我將能夠記錄事件。 –

0

這是my old answer。當此活動中沒有任何子視圖處理此事件時,將調用活動onTouchEvent(MotionEvent)方法。所以,你應該覆蓋的您的疊加圖onTouchEvent(MotionEvent)重要:返回true;在這種方法)。

+0

好的,但是如何檢測哪個視圖會消耗觸摸事件?如果您的疊加視圖位於頂部,則爲 –

+0

。你只需重寫這個視圖的'onTouchEvent(MotionEvent)'方法(記住'return true;'這意味着overlay視圖被處理的是其他方法的'MotionEvent'和'onTouchEvent(MotionEvent)'方法)。 –

+0

這裏的關鍵不是破壞原始事件的傳播,所以我一定要''onTouchEvent(MotionEvent)'的孩子被調用。 –