2010-07-22 12 views
10

Mam niestandardowy widok podklasowany z GridView, którego używam, aby wyświetlić niestandardową animację/efekt 3D. Sposób, w jaki to robię, polega na przesłonięciu dispatchDraw().Wykryj szybkość przewijania GridView - Android

Idealnie, chciałbym znać aktualną prędkość przewijania podczas robienia remisu. Obecnie używam GestureDetector.OnGestureListener i przechwytywam zdarzenia onScroll i działa to bardzo dobrze, poza tym, że nie wykrywa również rzutów jako zdarzeń przewijania.

Jednym z pomysłów, które przychodzą na myśl, jest przechwytywanie zdarzeń onFling, a następnie samodzielne przetwarzanie w przyszłości w celu wykrycia prędkości w późniejszym czasie.

Czy istnieje lepszy sposób osiągnięcia tego? Każdy prosty sposób sprawdzenia aktualnej prędkości przewijania GridView?

Dzięki.

+0

Wielkie pytania, czy kiedykolwiek rozwiązać ten problem? – Noah

Odpowiedz

1

Cóż, mam nadzieję, że masz odpowiedź teraz, ale nadal będę pisać jeden, do wykorzystania w przyszłości ...

Będziesz musiał zastąpić OnScrollListener i obliczyć prędkość dla siebie. Od Kinematics: Distance/Time = Speed

private class SpeedDetectorOnScrollListener implements OnScrollListener { 

    private long timeStamp; 
    private int prevFirstVisibleItem; 
    private int scrollingSpeed; 

    public SpeedDetectorOnScrollListener() { 
     timeStamp = System.currentTimeMillis(); 
     lastFirstVisibleItem = 0; 
    } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
     long lastTime = System.currentTimeMillis(); 
     timeStamp = lastTime; 
     lastFirstVisibleItem = firstVisibleItem; 
     scrollingSpeed = (firstVisibleItem - lastFirstVisibleItem)/(lastTime-timeStamp) 

    } 

    public int getSpeed() 
    { 
     return scrollingSpeed; 
    } 
} 
Powiązane problemy