Scroller scroller=new Scroller(mContext);
//缓慢滚动到指定位置
private voidsmoothScrollTO(int destX,int destY){
int scrollX=getScrollX();
int deltaX=destX -scrollX();
//1000ms内滑向destX,效果就是慢慢滑动
mScroller.startScroll(scrollX,0,deltaX,0,1000);
invalidate();
}
public void computeScroll(){
if(mScroller.computeScrollOffset()){
scrollTo(mScroller.getCurrX(),mScroller.getCurrY());
postInvalidate();
}
}
startScorll进行数据保存
invalidate();导致view被重绘,在view重绘时draw方法会调用
computeScroll方法获取Scroll的参数scrollX,scrollY通过ScrollTo方法实现滑动
接着调用postInvalidate方法进行第二次重绘。postInvalidate会继续调用computeScroll。。。
直至整个滑动过程结束
每次view重绘都会导致小幅度的滑动,而多次小幅度滑动就组成了弹性滑动。