官方介紹:scroller裡面封裝了滾動操作,並通過收集資料產生滾動動畫1.scroller的使用
mscroller = new scroller(context);
public
void
beginscroll()
public
void
computescroll()
}
2.scroller彈性滑動原理分析
首先來看下startscroll()方法
public
void
startscroll(int startx, int starty, int dx, int dy, int duration)
可以看出scroller
收集了一系列的資料,包括開始座標,偏移量,滾動時長,以當前時間作為starttime
,並計算出最終座標。
然後我們來看下computescroll()
方法
public
void
computescroll()
}
computescroll()
方法中,我們先判斷了scroller
是否滾動完畢,然後獲取currx
和curry
並作為引數傳入到scrollto()
方法進行滾動操作,並呼叫postinvalidate()
。
我們繼續看下computescrolloffset
是如何判斷滾動是否結束?
public
boolean
computescrolloffset()
int timepassed = (int)(animationutils.currentanimationtimemillis() - mstarttime);
if (timepassed < mduration)
else
return
true;
}
而在computescrolloffset()
方法中,我們通過當前時間和startscroll()
方法中獲取的starttime
的時間差來計算得到currx
和curry
,和屬性動畫裡面的插值器原理類似。
computescroll()
呼叫了scrollto
進行瞬間滑動,而彈性滑動我們其實可以理解為連續的瞬間滑動,按照這種理解,computescroll()
應該每隔一段時間就呼叫,才會產生彈性滑動的效果,通過檢視comutescroll()
方法的呼叫鏈,我們可以看出在draw
方法裡呼叫了computescroll()
,所以整個流程就很清楚了。
呼叫startscroll()
方法,然後invalidate()
,導致view
重繪,同時darw()
方法裡面會呼叫computescroll()
方法,在computescroll()
方法中,我們首先判斷是否滑動完畢,如果沒有滑動完畢就計算currx
,curry
,並作為引數傳入scrollto
方法中,然後呼叫postinvalidta()
方法,而postinvalidate()
也會導致view
重繪,結果就進入到迴圈狀態,直到滾動結束。
3.scroller實現彈性滑動的流程
Scroller使用分析
我們在需求實現時,經常遇到view滑動的情況,而scrollto scrollby方法都可以實現view的滑動,但是效果是瞬間完成的,使用者體驗並不好,我們可以使用scroller或者smoothscrollto 內部也是scroller實現的 來實現平滑移動的效果。常見於自定義view中。mscr...
scroller 做自己的動畫效果
在介紹scroller類之前,我們先去了解view的scrollby 和scrollto 方法的區別,在區分這兩個方法的之前,我們要先理解view 裡面的兩個成員變數mscrollx,mscrolly,x軸方向的偏移量和y軸方向的偏移量,這個是乙個相對距離,相對的不是螢幕的原點,而是view的左邊緣...
站在原始碼的角度全解Scroller工作機制(一)
在android開發中有多種方式實現view的滑動,常見的有三種如下 1 不斷地修改view的layoutparams 2 採用動畫向view施加位移效果 3 呼叫view的scrollto scrollby 前兩種方式我們還是挺熟悉的,不但見得挺多的而且還經常使用 至於最後一種方式,可能就要相對陌...