2013-12-09 117 views
0

我有一個ListView,它位於另一個視圖之上。Android ListView忽略特定單元格上的觸摸事件

ListView的第一個單元格是透明的,因此您可以看到它背後的視圖,然後將其餘內容滾動到其上。

我想要背景視圖捕捉觸摸事件,只有當透明單元格在它的頂部。這可能嗎?我嘗試了一百萬種不同的方法,在第一個單元格或列表視圖中重寫調度觸摸事件,但沒有取得任何成功。

+1

ListView是您創建的類嗎? ListView是在另一個視圖的頂部,在FrameLayout [或類似的]中?你有沒有嘗試過使用onTouchEvent? – Matt

+0

是的,我做了一個自定義ListView類,是的,它是在一個FrameLayout。如果我重寫ListView類中的dispatchTouchEvent並返回false,則一切正常(意味着事件正確傳遞),但listview不可滾動,並且沒有其他視圖可點擊。我還沒有用onTouchEvent嘗試過任何東西...... – pat

回答

1

當你攔截dispatchTouchEvent時,檢查你的ListView,找到頂層單元格(透明的單元格),如果MotionEvent的x,y座標在該單元格內,則返回false。否則返回true,你的ListView將獲得事件。

+0

是的,我嘗試了類似的東西,問題在於那些x,y座標的變化。例如,如果我們點擊(50,10)可能是透明單元格的中心。但是,我們可以向上滾動列表視圖,以便透明單元格離開屏幕,然後我們要單擊的單元格現在位於(50,10)處,並且它不會被點擊。感謝您的建議。 – pat

+0

我認爲你應該可以在頂部單元格中放置一個透明的View [帶有一個已知的ID],然後調用findViewById()。你可以通過這種方式得到它的界限。如果它不在屏幕上,它們應該是null,0或-1,如果你的x,y在視圖內,你知道返回false? – Matt

+0

此外,還有另一種方法可能非常有用:ListView.getFirstVisiblePosition() - 有一些很好的信息在http://stackoverflow.com/questions/2001760/android-listview-get-data-index-of-visible-item/2002413#2002413 – Matt

0

你也可以設置透明單元格的標籤,你可以在onclick()項目中獲得它。一旦你確定了細胞,你就可以做任何事情。