2012-06-14 110 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:Scroller Animation?]的可能重複(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滾輪被任何事情:) 之前,你也應該調用computeScrollOffset() 試試這個代碼-loop完成後,它的工作原理:隨着循環的進行,因此所有的值保持內循環

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