Scroller本身并不能滚动,如果要实现滚动,需要调用scrollBy()和scrollTo(),它本质上是对滚动轨迹的封装,根据时间差和差值器,计算滚动距离,在调用scrollTo()和scrollBy()完成滚动
构造方法
Scroller(Context context)
Scroller(Context context, Interpolator interpolator)
Scroller(Context context, Interpolator interpolator, boolean flywheel)
context上下文
Interpolator是插值器
flywheel是是否需要惯性滚动
主要方法startScroll(int startX , int startY , int dx , int dy , int duration)
参数说明
startX和startY是滚动开始之前,控件内容的滚动偏移量
dy和dx是即将要发生的滚动行为的滚动偏移量
duration是滚动执行时间
startScroll有重载方法startScroll(int startX , int startY , int dx , int dy),拥有默认的滚动时间250ms
computeScrollOffset()计算滑动偏移量,返回true表示滚动中,返回false表示滚动完成,或滚动取消
abortAnimation ()取消当前正在执行的滚动动画
getCurrX()和getCurrY()根据差值器和时间差计算出的当前滑动偏移量
方法调用过程:
首先初始化Scroller对象,调用startScroll()传入滚动参数,在startScroll()方法内部调用invalidate()重绘视图,重绘时调用computeScroll(),重写computeScroll(),在内部调用computeScrollOffset()判断滚动是否完成或结束,如果该方法返回true,调用getCurrX()和getCurrY()方法获取当前的滚动偏移量,延后调用scrollTo()滚动对对应位置,如果computeScrollOffset()返回false,滚动完成或结束.