scrollTo(int x, int y) : to有到达的意思,即 滑动到(x,y)点;
scrollBy(int x, int y) :by有经过的意思,即 再经过x,经过y后到达的坐标。
scrollTo()和scrollBy()滚动的是View的内容,而不是将View做整体的移动。比如,对于一个TextView而言,文本就是它的内容;对于一个ViewGroup而言,子View就是它的内容。(链接)
走到源码中可以看到scrollBy方法最后调用的scrollTo方法:
public void scrollBy(int x, int y) { scrollTo(mScrollX + x, mScrollY + y); }
public void scrollTo(int x, int y) { if (mScrollX != x || mScrollY != y) { int oldX = mScrollX; int oldY = mScrollY; mScrollX = x; mScrollY = y; invalidateParentCaches(); onScrollChanged(mScrollX, mScrollY, oldX, oldY); if (!awakenScrollBars()) { postInvalidateOnAnimation(); } } }通过scrollTo方法的源码可以得出:( 链接)
- scrollTo( )表示View相对于其初始位置滚动某段距离。
由于View的初始位置是不变的,所以如果利用相同输入参数多次调用scrollTo()方法,View只会出现一次滚动的效果而不是多次。
scrollTo和scrollBy移动的方向:view.scrollTo或view.scrollBy表示对view中的子view进行移动,如果view是TextView或Button是对里面的文字进行移动。
上图的页面是个TextView,背景色为蓝色,文字居中为Hello World! 从上图可以看出o点为文字的开始坐标点(0,0),即文字的左上角,当x>0时,向左移动;当y>0时,向上移动。
当执行textView.scrollBy(20,0),文字 会在当前位置上,移动到(x+20,y+0);
当执行textView.scrollTo(20,0),文字 会在原始的位置上(0,0),移动到(20,0)的位置上。
当执行textView.scrollTo(0,0),文字会回到原始的位置上(0,0)