站在源碼的角度全解Scroller工做機制(二)

scrollTo( )和scrollBy( )3d

View的源碼中,系統提供了scrollTo()scrollBy()這兩個方法用於實現View的滾動。這兩個方法又有什麼聯繫呢,咱們先來看一下scrollTo()的源碼:code

scrollTo()是實現View滾動的核心,調用該方法使得View相對於其初始位置滾動某段距離。在該方法內部將輸入參數x,y分別賦值給用於表示View在X方向滾動距離的mScrollX和表示View在Y方向滾動距離的mScrollY,而後調用onScrollChanged()而且刷新重繪View。在後續的操做中調用view.getScrollX()或view.getScrollY()能夠很容易地獲得mScrollX和mScrollY,關於這兩個值咱們再看看源碼是怎麼說的。blog

 


       關於mScrollX,官方文檔描述以下:ip

mScrollX和mScrollY用於描述View的內容在水平方向或垂直方向滾動的距離。文檔

什麼是View的內容呢?好比,對於一個TextView而言,文本就是它的內容;對於一個ViewGroup而言,子View就是它的內容。get

故在此,咱們請務必注意:scrollTo()scrollBy()滾動的是View的內容,而不是將View作總體的移動。源碼

 

繼續看scrollBy()的源碼:基礎

看到了吧:scrollBy()的源碼很是簡潔,它僅僅是再次調用了scrollTo()。scroll

直白地說:它只是把輸入參數x,y累加到了mScrollX和mScrollY上而已。方法

因此,scrollBy()方法是在mScrollX和mScrollY的基礎上滾動的。

小結:

1.mScrollX和mScrollY分別表示View在X、Y方向的滾動距離。

2.scrollTo( )表示View相對於其初始位置滾動某段距離。因爲View的初始位置是不變的,因此若是利用相同輸入參數屢次調用scrollTo()   方法,   View只會出現一次滾動的效果而不是屢次。

 

3.scrollBy( )表示在mScrollX和mScrollY的基礎上繼續滾動。

相關文章
相關標籤/搜索