要想實現(xiàn)滑動效果,那就需要我們先了解Android中窗口坐標(biāo)體系和屏幕的觸控事件(MotionEvent)。
一、坐標(biāo)系及觸控事件
在Android中坐標(biāo)系分兩種:
①Android坐標(biāo)系:以屏幕最左上角的頂點作為Android坐標(biāo)系的原點,從這個點向右是X軸正方向,從這個點向下是Y軸正方向。

Android坐標(biāo)系
且Android系統(tǒng)提供了getLocationOnScreen(intlocation[])方法來獲取Android坐標(biāo)系中點的位置,另外在觸控事件中使用getRawX()、getRawY()方法獲取的坐標(biāo)也是Android坐標(biāo)系中的坐標(biāo)。
②視圖坐標(biāo)系:視圖坐標(biāo)系的X軸、Y軸與Android坐標(biāo)系的一致,只不過原點變成以父視圖左上角為坐標(biāo)原點。

視圖坐標(biāo)系
在觸控事件中,通過getX()、getY()所獲得的坐標(biāo)就是視圖坐標(biāo)系中的坐標(biāo)。
觸控事件——MotionEvent
首先了解下MotionEvent中封裝的一些常用的事件常量,它定義了觸控事件的不同類型。

常用的事件常量
已經(jīng)了解了觸控事件的不同類型,那我們又該怎么去獲取呢?其實很簡單,通過event.getAction()方法就能獲取,且這個代碼格式基本是固定的。

獲取觸控事件類型并篩選
二、實現(xiàn)滑動的方法
①Layout方法:通過修改View的left、top、right、bottom四個屬性來控制View的坐標(biāo)。

圖 1-1

圖 1-2
注意:使用絕對坐標(biāo)系的時候,在每次執(zhí)行完ACTION_MOVE的邏輯后,一定要重新設(shè)置初始坐標(biāo)?。?!
②offsetLeftAndRight()與offsetTopAndBottom()
這個方法相當(dāng)于系統(tǒng)提供一個對左右、上下移動的API的封裝。

圖 2
③LayoutParams:其保存了一個View的布局參數(shù)。因此可通過它來動態(tài)修改一個布局的位置參數(shù)。

圖 3
④scrollTo和scrollBy:scrollTo(x,y)表示移動到一個具體的坐標(biāo)點(x,y),scrollBy(dx,dy)表示移動的增量為dx,dy。
使用時,有一點需要注意,如果將scrollBy里的參數(shù)全設(shè)為正數(shù)的話,content將向坐標(biāo)軸負(fù)方向移動,所以想要跟隨手指移動而滑動的話,必須將偏移量改為負(fù)值。

圖 4
⑤Scroller:通過Scroller類實現(xiàn)平滑移動,而不是瞬間完成的移動。
a:初始化Scroller、重寫computeScroll()方法,實現(xiàn)模擬滑動

圖 5-1
b:startScroll開啟模擬過程

圖 5-2