我有一個FiewFlipper
有ListViews作爲子。我已經找到了一種方法,在到達孩子之前攔截GestureDetector
的觸摸事件 - 一種通過ViewFlipper全局攔截觸摸事件的方法。ViewFlipper通過手勢切換ListViews通過手勢
擴展FiewFlipper並執行onInterceptTouchEvent (MotionEvent ev)
似乎是解決方案。這對大多數孩子來說效果很好。但是,當列表視圖開始滾動時,onInterceptTouchEvent停止接收事件。
我知道可以設置每個列表視圖的OnTouchListener,但是這個遺蹟簡直就是我試圖創建的層次結構。
你試圖壓制的行爲是故意的,你可能不應該試圖與它作鬥爭。 ListView在開始滾動時調用方法requestDisallowInterceptTouchEvent(true),從而防止觸摸事件派發在該視圖的祖先上調用onInterceptTouchEvent。它這樣做是爲了在用戶嘗試滾動時不會中斷粗糙的滾動手勢。 – adamp 2011-03-23 23:49:14
您需要從'onInterceptTouchEvent'返回'true'來將觸發事件從'ListView'重定向到您自己的組件(即在攔截時除了決定是否重定向事件外,實際上應該做任何事情)。一旦用戶將手指向左/右移動太遠,就可以做到這一點。這樣你就不會同時有兩個組件同時作用於觸摸事件。 – 2011-05-15 18:57:46
查看這個類的示例實現http://www.jmstudio.org/ - 它也有拖動。 – 2011-05-15 18:58:16