Android里Scroller类是为了实现View平滑滚动的一个Helper类。通常在自定义的View时使用,在View中定义一个私有成员mScroller = new Scroller(context)。设置mScroller滚动的位置时,并不会导致View的滚动,通常是用mScroller记录/计算View滚动的位置,再重写View的computeScroll(),完成实际的滚动。
相关API介绍如下:
1 2 3 4 5 6 7 8 9 10 11 12 mScroller.getCurrX() mScroller.getCurrY() mScroller.getFinalX() mScroller.getFinalY() mScroller.setFinalX(int newX ) mScroller.setFinalY(int newY ) mScroller.startScroll(int startX , int startY , int dx , int dy ) mScroller.startScroll(int startX , int startY , int dx , int dy , int duration ) mScroller.computeScrollOffset()
举例说明,自定义一个CustomView,使用Scroller实现滚动:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.widget.LinearLayout; import android.widget.Scroller; public class CustomView extends LinearLayout { private static final String TAG = "Scroller" ; private Scroller mScroller; public CustomView(Context context , AttributeSet attrs ) { super(context, attrs); mScroller = new Scroller(context ) ; } public void smoothScrollTo(int fx , int fy ) { int dx = fx - mScroller.getFinalX() ; int dy = fy - mScroller.getFinalY() ; smoothScrollBy(dx , dy ) ; } public void smoothScrollBy(int dx , int dy ) { mScroller.startScroll(mScroller .getFinalX () , mScroller.getFinalY() , dx, dy); invalidate() ; } @Override public void computeScroll() { if (mScroller.computeScrollOffset() ) { scrollTo(mScroller .getCurrX () , mScroller.getCurrY() ); postInvalidate() ; } super.computeScroll() ; } }
ScrollerDemo.rar