2010-07-22 26 views
10

Ho una vista personalizzata sottoclassata da GridView che uso per visualizzare alcuni effetti/animazioni 3D personalizzate. Il modo in cui lo faccio è sovrascrivendo dispatchDraw().Rileva velocità di scorrimento GridView - Android

Idealmente, vorrei conoscere la velocità corrente dello scorrimento quando si effettua il disegno. Attualmente, io uso GestureDetector.OnGestureListener e catturo gli eventi onScroll e questo funziona molto bene, tranne che non rileva anche lanci come eventi di scorrimento.

Un'idea che mi viene in mente sarebbe quella di acquisire gli eventi onFling e quindi eseguire l'elaborazione futura per conto mio in modo da rilevare la velocità in un secondo momento.

C'è un modo migliore per raggiungere questo obiettivo? Qualche modo semplice per interrogare la velocità di scorrimento corrente di un GridView?

Grazie.

+0

Grandi domande, hai mai risolvere il problema? – Noah

risposta

1

Beh, spero che hai avuto la tua risposta, ormai, ma ho ancora inviare uno, per un utilizzo futuro ...

dovrai ignorare OnScrollListener e calcolare la velocità per te stesso. Da Cinematica: 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; 
    } 
} 
Problemi correlati