Scroller是一個專門用于處理滾動效果的工具類,可能在大多數情況下,我們直接使用Scroller的場景并不多,但是很多大家所熟知的控件在內部都是使用Scroller來實現的,如ViewPager、ListView等
先撇開Scroller類不談,其實任何一個控件都是可以滾動的,因為在View類當中有scrollTo()和scrollBy()這兩個方法
* scrollBy()方法是讓View相對于當前的位置滾動某段距離,
* scrollTo()方法則是讓View相對于初始的位置滾動某段距離。
兩個scroll方法中傳入的參數,第一個參數x表示相對于當前位置橫向移動的距離,正值向左移動,負值向右移動,單位是像素。第二個參數y表示相對于當前位置縱向移動的距離,正值向上移動,負值向下移動,單位是像素。
使用這兩個方法完成的滾動效果是跳躍式的,沒有任何平滑滾動的效果。沒錯,只靠scrollTo()和scrollBy()這兩個方法是很難完成ViewPager這樣的效果的,因此我們還需要借助另外一個關鍵性的工具,也就我們今天的主角Scroller。
### Scroller的基本用法
Android里Scroller類是為了實現View平滑滾動的一個Helper類。通常在自定義的View時使用,在View中定義一個私有成員mScroller = new Scroller(context)。設置mScroller滾動的位置時,并不會導致View的滾動,通常是用mScroller記錄/計算View滾動的位置,再重寫View的computeScroll(),完成實際的滾動。
~~~
mScroller.getCurrX() //獲取mScroller當前水平滾動的位置
mScroller.getCurrY() //獲取mScroller當前豎直滾動的位置
mScroller.getFinalX() //獲取mScroller最終停止的水平位置
mScroller.getFinalY() //獲取mScroller最終停止的豎直位置
mScroller.setFinalX(int newX) //設置mScroller最終停留的水平位置,沒有動畫效果,直接跳到目標位置
mScroller.setFinalY(int newY) //設置mScroller最終停留的豎直位置,沒有動畫效果,直接跳到目標位置
//滾動,startX, startY為開始滾動的位置,dx,dy為滾動的偏移量, duration為完成滾動的時間
mScroller.startScroll(int startX, int startY, int dx, int dy) //使用默認完成時間250ms
mScroller.startScroll(int startX, int startY, int dx, int dy, int duration)
mScroller.computeScrollOffset() //返回值為boolean,true說明滾動尚未完成,false說明滾動已經完成。這是一個很重要的方法,通常放在View.computeScroll()中,用來判斷是否滾動是否結束。
~~~