android 布局滑动中scrollTo 和 scrollBy 方法使用说明
2019獨角獸企業重金招聘Python工程師標準>>>
首先,看源碼:
public void scrollTo(int x, int y) {if (mScrollX != x || mScrollY != y) {int oldX = mScrollX;int oldY = mScrollY;mScrollX = x;mScrollY = y;onScrollChanged(mScrollX, mScrollY, oldX, oldY);if (!awakenScrollBars()) {invalidate();}}} public void scrollBy(int x, int y) {scrollTo(mScrollX + x, mScrollY + y);}從源碼中可以看到,scrollBy()的內部其實是調用了scrollTo()。在scrollTo()中,調用了onScrollChanged()和invalidate()。onScrollChanged()的作用就是告訴系統(可以理解為Android框架),這個View的scrollTo()或scrollBy()曾經被調用過;而invalidate()是告訴系統,這個View需要被重新繪制。
mScrollX:表示離視圖起始位置的x水平方向的偏移量 mScrollY:表示離視圖起始位置的y垂直方向的偏移量分別通過getScrollX() 和getScrollY()方法獲得。 注意:mScrollX和mScrollY指的并不是坐標,而是偏移量。
scrollTo(int x,int y):如果偏移位置發生了改變,就會給mScrollX和mScrollY賦新值,改變當前位置。 #####注意:x,y代表的不是坐標點,而是偏移量。 例如: 我要移動view到坐標點(100,100),那么我的偏移量就是:原位置坐標-目標位置坐標=偏移量 (0,,0) - (100,100) = (-100 ,-100) ,我就要執行view.scrollTo(-100,-100),達到這個效果。
scrollBy(int x,int y):從源碼中看出,它實際上是調用了scrollTo(mScrollX + x, mScrollY + y); mScrollX + x和mScrollY + y,即表示在原先偏移的基礎上在發生偏移,通俗的說就是相對我們當前位置偏移。 由于sctrollTo只是移動了內容content,所以是父類VIEW里面的所有子控件在移動,而父容器ViewGroup并沒有移動,也就是說位置它還占用著,移動子控件的時候,子控件只能在容器里面移動,如果子控件移動到了超出的地方(父控件的范圍),那么超出的位置就不會顯示了。
轉載于:https://my.oschina.net/byronhs/blog/714132
總結
以上是生活随笔為你收集整理的android 布局滑动中scrollTo 和 scrollBy 方法使用说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS :hover 选择器
- 下一篇: 【Coursera】SecondWeek