2012-06-14 20 views
7

Kann mir jemand ein einfaches Beispiel über Scroller-Klasse geben? Wie ich es verstehe, kapselt es Scrolling, also muss ich anfangen zu berechnen und dann manuell aktualisieren ScrollView zu neuen Positionen. Also versuche ich einfachAndroid Scroller einfaches Beispiel

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()); 
    } 

Alles, was ich in der Ausgabe habe, ist nur Nullen. Wo ist mein Fehler?

+0

Nichts innerhalb der Schleife ändert, wenn die Schleife alle fortschreitet, so dass die Werte bleiben das Gleiche. –

+0

mögliches Duplikat von [Android: Scroller Animation?] (Http://stackoverflow.com/questions/5495855/android-scroller-animation) –

+0

Siehe auch die Dokumentation. https://developer.android.com/training/gestures/scroll.html – Suragch

Antwort

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); 
     } 
    } 
} 

Entnommen https://stackoverflow.com/a/6219382/1351347

4

Letzter Parameter in startScroll() ist Dauer. Ihre for Wahrscheinlich -loop beendet ist, bevor das Stellrad alles :) gemacht wird und auch Sie sollten computeScrollOffset() Versuchen Sie diesen Code aufrufen, funktioniert es:

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