Android 實現(xiàn)Scroll(滑動)的方法(一)——Android群英傳學(xué)習(xí)筆記

要想實現(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

實現(xiàn)Scroll(滑動)的方法還有兩種:屬性動畫和ViewDragHelper,其中ViewDragHelper準(zhǔn)備通過QQ滑動側(cè)邊欄 例子來說,為了給大家一個好的消化過程,所以放在下一篇文章。

這篇文章到這里就結(jié)束了,希望能給大家?guī)硎斋@?。?!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容