2010-07-22 7 views
10

Tengo una vista personalizada subclasificada de GridView que uso para mostrar algunas animaciones/efectos 3D personalizados. La forma en que hago esto es anulando dispatchDraw().Detectar la velocidad de desplazamiento de GridView - Android

Idealmente, me gustaría saber la velocidad actual del desplazamiento al hacer el sorteo. Actualmente, utilizo GestureDetector.OnGestureListener y capturo los eventos onScroll y esto funciona muy bien, excepto que tampoco detecta flings como eventos de desplazamiento.

Una idea que me viene a la mente sería capturar eventos onFling y luego hacer un procesamiento futuro por mi cuenta para detectar la velocidad en otro momento.

¿Hay alguna forma mejor de lograr esto? ¿Alguna forma sencilla de consultar la velocidad de desplazamiento actual de un GridView?

Gracias.

+0

Grandes preguntas, ¿alguna vez resolver el problema? – Noah

Respuesta

1

Bueno, espero que tenga su respuesta a estas alturas, pero aún así voy a publicar uno, para su uso futuro ...

que va a necesitar para anular OnScrollListener y calcular la velocidad por sí mismo. De Cinemática: 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; 
    } 
} 
Cuestiones relacionadas