scrollto和scrollby的區別

時間 2021-06-16 17:31:55

1樓:

view類的源**如下所示,mscrollx記錄的是當前view針對螢幕座標在水平方向上的偏移量,而mscrolly則是記錄的時當前view針對螢幕在豎值方向上的偏移量。

從以下**我們可以得知,scrollto就是把view移動到螢幕的x和y位置,也就是絕對位置。而scrollby其實就是呼叫的scrollto,但是引數是當前mscrollx和mscrolly加上x和y的位置,所以scrollby呼叫的是相對於mscrollx和mscrolly的位置。我們在上面的**中可以看到當我們手指不放移動螢幕時,就會呼叫scrollby來移動一段相對的距離。

而當我們手指鬆開後,會呼叫mscroller.startscroll(munboundedscrollx, 0, delta, 0, duration);來產生一段動畫來移動到相應的頁面,在這個過程中系統回不斷呼叫computescroll(),我們再使用scrollto來把view移動到當前scroller所在的絕對位置。

/*** set the scrolled position of your view. this will cause a call to

* and the view will be

* invalidated.

* @param x the x position to scroll to

* @param y the y position to scroll to

*/public void scrollto(int x, int y) }}

/*** move the scrolled position of your view. this will cause a call to

* and the view will be

* invalidated.

* @param x the amount of pixels to scroll by horizontally

* @param y the amount of pixels to scroll by vertically

*/public void scrollby(int x, int y)

2樓:匿名使用者

1、區別

1)scrollto()是一步到位;

2)scrollby()是逐步累加。

2、例子:

1)假設有一個view,如果想把sview從(0, 0)移動到(100, 100)。注意,這裡說的(0, 0)和(100, 100),指的是sview左上角的座標。那麼偏移量就是原點(0, 0)到目標點(100, 100)的距離,即(0 , 0) - (100, 100) = (-100, -100)。

只需要呼叫sview.scrollto(-100, -100)就可以了。scrollto(int x, int y)的兩個引數x和y,代表的是偏移量,這時的參照物是(0, 0)點。

然而,scrollby()是有一定的區別的。scrollby()的參照物是(0, 0)點加上偏移量之後的座標。

2)假設sview呼叫了scrollto(-100, -100),此時sview左上角的座標是(100, 100),這時再呼叫scrollby(-20, -20),此時sview的左上角就被繪製到了(120, 120)這個位置。

android中scrollto和scrollby的區別以及scroller原始碼解析

3樓:

* set the scrolled position of your view. this will cause a call to

* and the view will be

* invalidated.

* @param x the x position to scroll to

* @param y the y position to scroll to

*/public void scrollto(int x, int y)