2012-02-29 70 views
0

我已經與一些子項實現了自定義視圖。該視圖可以使用標準拖動手勢滾動。也可以點擊每個孩子。問題是,當我開始拖動視圖時,其中一個孩子變得「倒下」事件,並且它的狀態將其狀態更改爲「按下」一秒鐘。我更喜歡標準的listview行爲 - 當用戶用他/她的手指持續按這個孩子50ms時,孩子進入按下狀態。這將減少誤讀新聞事件引起的眨眼。在自定義拖動/水龍頭實現中閃爍

我知道,我需要至少2個事件來檢測用戶是否在點擊或拖動視圖。現在我正在使用TimerTask來處理'down'事件。當我在'down'事件執行前得到'move'事件時,我知道用戶正在拖動,我可以取消sheduled事件。

我知道這很不方便。我還嘗試使用gesturedetector來檢測拖動和點擊事件,但是當用戶移動手指並開始拖動視圖時,需要一些額外的工作來正確實現從按下更改視圖狀態到默認狀態。

我的問題是 - 這是如何在android listview中實現?我試圖從listview實現中複製他們的解決方案,但它太大了,我無法處理它。只是我沒有看到負責處理這種情況的代碼。

回答

0

我設法瞭解ListView中的手勢檢測邏輯,並且通常在Android視圖中瞭解手勢檢測邏輯。我寫了自己的手勢探測器,比原來的探測器好一些。它報告更多的手勢(多次點擊,拖動),並有一些配置(超時,移動epsilon)。你可以在這裏找到它開源:Better Gesture Detector on code.google

庫使用Handler類和postDelayed()/ removeCallbacks()方法組合進行檢測,處理和取消移動事件和手勢。這非常簡單,只需閱讀代碼即可獲得想法。

此存儲庫還包含一個簡單的演示。請注意,此代碼按「原樣」提供,包含一些無用的註釋和日誌,應予以清理。