2012-05-16 121 views
22

我希望在自定義視圖中順利移動到下一個滾動位置(按下按鈕或事件)。如何實現這一點?首先我看不到滾動動畫類(只有alpha,旋轉,縮放和翻譯)。其次,有了動畫類,我看不到迭代的(比如說,無論我們擁有哪個位置都滾動100像素的權限),只有絕對的(即從一個常量值到另一個常量值的動畫)。如何動畫滾動位置?如何順利滾動?

回答

35

假設您正在使用ScrollView,smoothScrollTo(...)會爲您工作嗎?

http://developer.android.com/reference/android/widget/ScrollView.html#smoothScrollTo%28int,%20int%29

+0

我應該使用'ScrollView'?現在我正在使用'MyClass extends View'。 –

+0

我認爲這取決於你在做什麼,如果一個ScrollView適合你,然後定義使用它。 –

+0

我試着擴展'ScrollView',但發現'onScrollChanged()'不會在這種情況下調用。我需要調用這個方法,因爲我計算了一些參數。即'smoothScroll'不適合我。 –

0

view_cache_demo示例代碼,看看如何做動畫滾動。它可以在2D中工作,緩存複雜的繪圖,並且還可以處理跳躍手勢,但是您可以根據需要簡化所有這些操作。

1

動畫效果滾動通過使用的組合完成滾輪/ OverScroller(計算時間的滾動偏移的內插的值),GestureDetectors(啓動卷軸對象)和觀的onComputeScroll方法(這隱含地是你的動畫循環)。

官方的android文檔現在有一個關於這個主題的詳細教程。 http://developer.android.com/training/gestures/scroll.html

22

使用ObjectAnimator,這是滾動到頂部的樣品:

public void scroolToTop() { 
      int x = 0; 
      int y = 0; 
    ObjectAnimator xTranslate = ObjectAnimator.ofInt(mScrollView, "scrollX", x); 
    ObjectAnimator yTranslate = ObjectAnimator.ofInt(mScrollView, "scrollY", y); 

    AnimatorSet animators = new AnimatorSet(); 
    animators.setDuration(1000L); 
    animators.playTogether(xTranslate, yTranslate); 
    animators.addListener(new AnimatorListener() { 

     @Override 
     public void onAnimationStart(Animator arg0) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onAnimationRepeat(Animator arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onAnimationEnd(Animator arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onAnimationCancel(Animator arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 
    animators.start(); 
} 
+0

非常好,作品非常感謝你。 – Karoly

+0

工程出色! – ventura8

+0

流暢的動畫就像一個魅力! –