如何攔截活動中的所有觸摸事件並檢測事件的使用者?爲了簡化,讓我們假設我必須記錄所有這樣的事件:ImageView -> onLongClick()
。如何攔截所有觸摸事件並檢測其消費者
實際的問題,實際上是檢測事件的消費者 - 攔截所有的事件,我可以在活動視圖頂部添加疊加,或在活動覆蓋dispatchTouchEvent(MotionEvent)
,但我不知道如何檢測這些事件的消費者。
如何攔截活動中的所有觸摸事件並檢測事件的使用者?爲了簡化,讓我們假設我必須記錄所有這樣的事件:ImageView -> onLongClick()
。如何攔截所有觸摸事件並檢測其消費者
實際的問題,實際上是檢測事件的消費者 - 攔截所有的事件,我可以在活動視圖頂部添加疊加,或在活動覆蓋dispatchTouchEvent(MotionEvent)
,但我不知道如何檢測這些事件的消費者。
如果您在活動中重寫dispatchTouchEvent,那意味着所有事件都將被Activity攔截。
此活動中的任何視圖都不會收到任何消息,因爲您已經使用它。
我不知道你爲什麼想這樣做,但如果你想學習或什麼,你可以讀一些關於android視圖事件。
這是my old answer。當此活動中沒有任何子視圖處理此事件時,將調用活動的onTouchEvent(MotionEvent)
方法。所以,你應該覆蓋的您的疊加圖onTouchEvent(MotionEvent)
(重要:返回true;在這種方法)。
好的,但是如何檢測哪個視圖會消耗觸摸事件?如果您的疊加視圖位於頂部,則爲 –
。你只需重寫這個視圖的'onTouchEvent(MotionEvent)'方法(記住'return true;'這意味着overlay視圖被處理的是其他方法的'MotionEvent'和'onTouchEvent(MotionEvent)'方法)。 –
這裏的關鍵不是破壞原始事件的傳播,所以我一定要''onTouchEvent(MotionEvent)'的孩子被調用。 –
不正確,如果我將重寫'dispatchTouchEvent'並在其內部調用超級實現,則孩子將像以前那樣獲得事件,並且我將能夠記錄事件。 –