2011-08-18 56 views
8

我使用GestureDetector來實現自定義View內的滾動。我的實現是基於這樣的:Smooth scrolling with inertia and edge resistance/snapback使用手勢檢測器滾動滯後

我注意到一個短暫的停頓滾動開始前我檢查了onScroll信息,發現只有在手指較大的運動,這會導致noticable滯後開頭的第一個到達的滾動。之後,滾動平穩。

看來GestureDetector僅開始後motionevents之間的最小距離發送onScroll信息,以確保姿勢不是longtap或點擊(順便說一句我設置setIsLongpressEnabled(false))。

有什麼方法可以改變這種行爲,並創建一個平滑的滾動,而不使用低級別觸摸事件實現自定義滾動手勢?

回答

10

答案是否定的,你必須創建你自己的GestureDetector。如果您查看Android源代碼(GestureDetector.java),則可以使用第524至540行來檢測單擊的「觸摸斜坡」。具體來說,第528行可以防止onScroll事件被調用,直到移動超出觸摸斜坡(從視圖配置拉出)爲止。您無法更改視圖配置,並且slop被硬編碼爲16像素。這是導致您看到的滯後的半徑。