2012-06-14 18 views
7

¿Alguien me puede dar un ejemplo simple sobre la clase Scroller? Según tengo entendido, encapsula el desplazamiento, por lo que necesito comenzar a calcular y luego actualizar manualmente debe desplazarse a nuevas posiciones. Así que solo intentoAndroid Scroller simple example

Scroller scroller = new Scroller(getApplicationContext()); 
    scroller.startScroll(0, 0, 10, 10, 500); 
    for (int i = 0; i < 100; i++) { 
     Log.d("scroller", scroller.getCurrX()+" "+ scroller.getCurrY()); 
    } 

Todo lo que tengo en salida son solo ceros. ¿Dónde está mi error?

+0

Nada cambia dentro del bucle como el bucle avanza por lo que todos los valores se mantienen lo mismo. –

+0

posible duplicado de [Android: ¿Animación de desplazamiento?] (Http://stackoverflow.com/questions/5495855/android-scroller-animation) –

+0

Consulte la documentación también. https://developer.android.com/training/gestures/scroll.html – Suragch

Respuesta

6
private class Flinger implements Runnable { 
    private final Scroller scroller; 

    private int lastX = 0; 

    Flinger() { 
     scroller = new Scroller(getActivity()); 
    } 

    void start(int initialVelocity) { 
     int initialX = scrollingView.getScrollX(); 
     int maxX = Integer.MAX_VALUE; // or some appropriate max value in your code 
     scroller.fling(initialX, 0, initialVelocity, 0, 0, maxX, 0, 10); 
     Log.i(TAG, "starting fling at " + initialX + ", velocity is " + initialVelocity + ""); 

     lastX = initialX; 
     getView().post(this); 
    } 

    public void run() { 
     if (scroller.isFinished()) { 
      Log.i(TAG, "scroller is finished, done with fling"); 
      return; 
     } 

     boolean more = scroller.computeScrollOffset(); 
     int x = scroller.getCurrX(); 
     int diff = lastX - x; 
     if (diff != 0) { 
      scrollingView.scrollBy(diff, 0); 
      lastX = x; 
     } 

     if (more) { 
      getView().post(this); 
     } 
    } 

    boolean isFlinging() { 
     return !scroller.isFinished(); 
    } 

    void forceFinished() { 
     if (!scroller.isFinished()) { 
      scroller.forceFinished(true); 
     } 
    } 
} 

Tomado de https://stackoverflow.com/a/6219382/1351347

4

último parámetro es startScroll() duración. probablemente su for -loop termina antes de que el desplazador se hace nada :) Y también debe llamar a computeScrollOffset() Prueba este código, funciona:

Scroller scroller = new Scroller(getApplicationContext()); 
scroller.startScroll(0, 0, 100, 100, 500); 
while (!scroller.isFinished()) { 
    Log.d("scroller", scroller.getCurrX() + " " + scroller.getCurrY()); 
    scroller.computeScrollOffset(); 
}