Android開發 彈性滑動的兩種實現方式

2021-07-22 17:43:41 字數 2656 閱讀 2344

0.

前言我們在android

開發——

view

滑動的三種實現方式中學習了如何進行

view

滑動,在第一種方法,利用

scrollby

和scrollto

進行滑動時,滑動效果是瞬間完成的,為了更好的使用者體驗,有時我們

需要滑動有乙個漸變的過程

。這就是所謂的彈性滑動。

1.

延時策略

我們解決彈性滑動的第一反應可能就是採用延時策略,通過

handler

傳送並接收延時訊息

,每次接收到訊息便完成一次

scrollto

操作,從而實現彈性滑動的效果。

核心**展示如下:

public void handlemessage(message msg) 

break;

}default:

break;

}}

上述這種利用

handler

傳送延時訊息的方式比較簡單,但是需要注意的是,

由於系統的訊息排程需要時間

,完成這次彈性滑動的時間

總是大於

if條件判斷為

true

的次數乘以

20ms

(延遲訊息的傳送時間間隔)

。因此對彈性滑動完成

總時間有精確要求

的使用場景下,使用延時策略是乙個不太合適的選擇。

2.

scroller

的使用2.1

系統提供的

scroller

利用系統提供給我們的

scroller

類,我們可以很方便的實現彈性滑動。**比較簡單,都是模版化的,如下所示:

scroller scroller = new scroller(mcontext);

private void smoothscrollto(int destx, int desty)

//該方法為空實現,因此需要重寫

//該方法會被invalidate()方法觸發執行

@override

public void computescroll()

}

這裡說一下

invalidate()

和postinvalidate()

的區別:

為了ui

安全,invalidate()

可在主線程

直接呼叫重新整理介面,而

postinvalidate()

會用handler

通知ui

執行緒重繪螢幕,因此後者適用於

子執行緒。

2.2

自定義scroller

上面介紹了

呼叫系統提供的

scroller

的使用方法,但是

scroller

類的getcurrx()

、computescrolloffset()

等方法都是寫死的。實現的彈性滑動是

先快後慢

的效果。

下面我們

自行實現乙個

myscroller

類來完成勻速滑動的效果

,同時也有助於理解系統

scroller

類的實現原理。

/*

* created by seu_calvin on 2016/09/12

* 計算位移距離的自定義scroller

*/public class myscroll

public long getcurrx()

public long getcurry()

public void startscroll(int startx, int starty, int distancex, int distancey, int duration)

/** created by seu_calvin on 2016/09/12

* 判斷是否滑動結束並改變將要被使用的currentx/y

*/public boolean computescrolloffset()

//獲得starttime到呼叫由於重繪導致computescrolloffset()呼叫之間的passtime

long passtime = systemclock.uptimemillis()-starttime;

//計算currentx的值,指導下一步scrollto的位置

//startx/y

我們只要在呼叫時改變呼叫的my

scroll

類即可。其他**不做修改。

具體滑動效果,如勻速,勻加速,先慢後快

等效果完全可以由

myscroll

中自己的演算法來決定

。以上就是對android開發中彈性滑動的介紹。

Android彈性滑動

1 view使用scroller滑動 在scroller.startscroll 方法中,會將scrollx和deltax相加存入mfinalx中 invalidate 方法會呼叫draw 方法,draw 會呼叫computescroll 方法,而在view 中computescroll 方法是空實...

Android自定義彈性滑動View

1.記錄一下自己自定義view 2.直接子view只能是乙個 public class slideview extends viewgroup public slideview context context,nullable attributeset attrs public slideview ...

關於ListView的彈性滑動

最近專案中用到了彈性滑動,但是這個彈性滑動只有在2.3之後才有了功能函式,在2.2以及之前的版本中,只有自己去實現了。查了一下網上的資源,貌似沒有提供出來乙個具體的方式來實現。看到乙個牛人寫的乙個軟體中實現了彈性滑動,查了查原始碼,然後看了看listview的原始碼,然後自己搞了一下,實現了彈性滑動...