1.1 構造Scroller
可以看到Scroller有2個構造器,其中第二個構造器需要傳入Interpolator,它是壹個插值器,決定了view在滑動中的效果。第壹種構造會默認使用ViscousFluidInterpolator這個插值器。
1.2 重寫View的computeScroll()
1.3 開始滑動
以上就是Scroller的簡單使用,需要註意的是Scroller移動的是View的內容而不是View本身,如壹個LinearLayout裏有2個Button,移動的是這2個Button而不是LinearLayout自己(原因在源碼解析裏)。
另外Scroller還有個快速滑過的方法:
2.1 先看下startScroll():
可以看到startScroll只是記錄了傳入了參數,並沒有做什麽實際操作。
2.2 前面說過移動是通過scrollTo()完成的,那麽看看它的源碼
這裏可以看到scrollTo更新了mScrollX,和mScrollY的值,最終會觸發重繪調用invalidate(),最終會調用到viewGroup的drawChild():
最終調用到了view的3個參數的draw(),再繼續看
在draw()中調用了computeScroll(),然後把最新的mScrollX,mScrollY賦值給sx,sy,最後完成移動。
那麽就是這樣壹個流程:
startScroll()->invalidate()->draw()->computeScroll()-scrollTo()->invalidate()->draw()->computeScroll()-scrollTo()...
並壹直循環,直到scroller.computeScrollOffset()返回false,滑動完成。
3.1 看壹下OverScroller擴展的方法