2012-06-14 2 views
7

Может ли кто-нибудь дать мне простой пример о классе Scroller? Насколько я понимаю, он инкапсулирует прокрутку, поэтому мне нужно начать вычисление, а затем вручную обновить ScrollView до новых позиций. Поэтому я просто попробуюПростой пример Android Scroller

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

Все, что у меня есть, - это всего лишь нули. Где моя ошибка?

+0

Ничего не меняется внутри цикла, как петля прогрессирует так остаются все значения тоже самое. –

+0

Возможный дубликат [Android: анимация скроллеров?] (Http://stackoverflow.com/questions/5495855/android-scroller-animation) –

+0

Смотрите также документацию. https://developer.android.com/training/gestures/scroll.html – Suragch

ответ

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

Взятые из https://stackoverflow.com/a/6219382/1351347

4

Последний параметр в startScroll() является длительность. Возможно, ваш for -loop заканчивается раньше скроллер получает что-нибудь сделать :) А также вы должны позвонить computeScrollOffset() Попробуйте этот код, он работает:

Scroller scroller = new Scroller(getApplicationContext()); 
scroller.startScroll(0, 0, 100, 100, 500); 
while (!scroller.isFinished()) { 
    Log.d("scroller", scroller.getCurrX() + " " + scroller.getCurrY()); 
    scroller.computeScrollOffset(); 
} 
Смежные вопросы