View滑動是自定義ViewGroup中十分常見的一個功能。Android提供了多種View滑動的方法。

  1. layout方法

  2. offsetLeftAndRight()與offsetTopAndBottom方法

  3. LayoutParams方法

  4. scrollTo 與scrollBy方法

  5. 利用Scroller類

  6. 屬性動畫

  7. ViewDragHelper

雖然Android提供了這個多方法,實際上他們的原理都是一樣的,當觸摸到View時,系統(tǒng)記下當前觸摸點的坐標;當手指移動時,系統(tǒng)記下移動后的觸摸點坐標,從而獲取到相對于前一次坐標點的偏移量,并通過偏移量來修改View的坐標。這樣不斷的重復,就實現(xiàn)了滑動。
這篇文章,主要說下利用Scroller類來實現(xiàn)滑動,Scroller類比起他之前的說的那些方法,他有一個優(yōu)勢在于他的滑動效果是平滑的。

View中的坐標系

在Android中有兩種坐標系,一種是Android坐標系,一種是視圖坐標系。根據(jù)物理學知識,坐標系的選取不同,物體的移動會有不同的效果。
在Android坐標系中,坐標的原點是以屏幕的左上角為(0,0)。這個點向右為x軸正方向,這個點向下為y軸正方向。在滑動處理的時候,我們常常需要獲得點的坐標,如果我們用getRawX()和getRawY()來獲得該點的坐標,則這個坐標是相對于Android坐標系的坐標。
在視圖坐標系中,坐標的原點是父視圖的左上角為(0,0)。同樣,這個點向右為x軸正方向,這個點向下為y軸正方向。我們常常用getX()和getY()來獲得該點的坐標,則這個坐標就是視圖坐標系的坐標,也就是說相對于父視圖的相對坐標。
最后,我們總結一下這4個方法的具體含義,在后面的滑動時會經(jīng)常遇到。

getX(): 獲取點擊事件距離控件左邊的距離,即視圖坐標