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的原始碼,然後自己搞了一下,實現了彈性滑動...