2010-07-22 13 views
10

J'ai une vue personnalisée sous-classée de GridView que j'utilise afin d'afficher une animation/effet 3D personnalisé. La façon dont je fais cela est en remplaçant dispatchDraw().Détecter la vitesse de défilement GridView - Android

Idéalement, je voudrais connaître la vitesse actuelle du défilement lors du tirage. Actuellement, j'utilise GestureDetector.OnGestureListener et capture onScroll événements et cela fonctionne très bien, sauf qu'il ne détecte pas également les flings comme des événements de défilement. Une idée qui me vient à l'esprit serait de capturer les événements onFling, puis de faire un traitement ultérieur par moi-même afin de détecter la vitesse plus tard.

Y a-t-il un meilleur moyen d'y parvenir? Un moyen simple d'interroger la vitesse de défilement actuelle d'un GridView?

Merci.

+0

des questions Grand, vous avez à résoudre jamais le problème? – Noah

Répondre

1

Eh bien, je l'espère, vous avez obtenu votre réponse maintenant, mais je vais encore poster un, pour une utilisation future ...

Vous aurez besoin de passer outre OnScrollListener et calculer la vitesse pour vous-même. De Cinématique: 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; 
    } 
}