我需要禁用touchevent處理的listview,但允許它的孩子接受點擊。我有一個框架佈局,它有一個mapview和它的列表視圖。當列表爲空時,我希望地圖處理所有的觸摸事件,但是當列表被填充時,我希望列表項收到clickevents。如何禁用ListView觸摸事件?只允許childview點擊
回答
您可以使用onInterceptTouchEvent()攔截自定義FrameLayout(您的根ViewGroup)中的所有觸摸事件:http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent(android.view.MotionEvent)。
你在那裏做的是捕獲MotionEvent.ACTION_DOWN事件,並根據ListView是否爲空(觸摸到MapView)或填充並在邊界內決定事件是否適用於ListView或MapView ListView(觸及ListView)。 在這兩種情況下都返回true,並在onTouchEvent()(仍然是FrameLayout)中捕獲以下ACTION_DOWN事件。這樣,所有觸及ACTION_CANCEL的事件都將轉到您的FrameLayout的onTouchEvent()。
您的FrameLayout的onTouchEvent()將派發所有觸摸事件到ListView或MapView。 onInterceptTouchEvent()中已經採用了哪些視圖獲取事件的決定,因此您需要以某種方式存儲該決定的結果。該決定在ACTION_DOWN和ACTION_POINTER_UP,ACTION_UP,ACTION_CANCEL事件之間有效。
我不確定是否要禁用所有不選擇列表項目(拋出,滾動等)的非空ListView的觸摸事件?因爲這會使事情相當複雜。雖然我認爲從用戶的角度來看並不合適,因爲列表項不適合ListView的視口無法單擊,因爲您無法向上或向下滾動。
不要期望這很容易工作。理解運動事件的流程以及onInterceptTouchEvent()和onTouchEvent()之間的交互是非常具有挑戰性的,並使其更加有效。但我相信這是解決您的問題的可行方法。
- 1. iPhone - 如何跟蹤觸摸並允許按鈕同時點擊?
- 2. 如何禁用觸摸事件android
- 3. 允許單點觸摸事件通過UIScrollView
- 4. JS觸摸事件掛件點擊
- 5. 禁用listview點擊或觸摸滾動項目android
- 6. CSS/JS - 禁用點擊事件,但允許在DIV上滾動
- 7. 只允許點擊一次
- 8. Silver/WPF刪除鼠標事件,但允許觸摸事件
- 9. 統一觸摸和點擊事件
- 10. 使視圖允許單點觸摸
- 11. 觸摸開始事件是否會觸發點擊事件?
- 12. listView項點擊事件沒有觸發
- 13. 通觸摸事件時的按鈕點擊的透明區域,但允許點擊
- 14. 如何檢測多點觸摸事件?
- 15. AngularJS - 使用指令允許jQuery點擊事件觸發ng單擊
- 16. 如何讓Qwt接受觸摸和多點觸摸事件?
- 17. Android - 滾動時禁用觸摸事件
- 18. userInteractionEnabled不禁用觸摸事件
- 19. 在Android中禁用WebView觸摸事件
- 20. 處理時禁用觸摸事件
- 21. ChromeDriver觸摸事件始終被禁用
- 22. 只允許某些事件
- 23. 允許觸摸事件只在一些選定的視圖標籤
- 24. 多點觸摸事件
- 25. 禁用Div覆蓋點擊,但允許兒童點擊
- 26. iOS在一次給定時間允許一次觸摸事件
- 27. 如何通過點擊可觸摸組件觸發另一觸摸組件的新聞事件?
- 28. ListView項燕子觸摸事件
- 29. 點擊禁用父事件,但允許孩子保持自己的活動
- 30. 在單點觸摸越來越多點觸摸事件