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)