参考资料:http://blog.csdn.net/vipzjyno1/article/details/24577023 非常感谢这个兄弟!

先查看这2个方法的源码:

scrollTo:

 1  /**
 2      * Set the scrolled position of your view. This will cause a call to
 3      * {@link #onScrollChanged(int, int, int, int)} and the view will be
 4      * invalidated.
 5      * @param x the x position to scroll to
 6      * @param y the y position to scroll to
 7      */
 8     public void scrollTo(int x, int y) {
 9         if (mScrollX != x || mScrollY != y) {
10             int oldX = mScrollX;
11             int oldY = mScrollY;
12             mScrollX = x;
13             mScrollY = y;
14             invalidateParentCaches();
15             onScrollChanged(mScrollX, mScrollY, oldX, oldY);
16             if (!awakenScrollBars()) {
17                 postInvalidateOnAnimation();
18             }
19         }
20     }

 

 scrollBy:

 1 /**
 2      * Move the scrolled position of your view. This will cause a call to
 3      * {@link #onScrollChanged(int, int, int, int)} and the view will be
 4      * invalidated.
 5      * @param x the amount of pixels to scroll by horizontally
 6      * @param y the amount of pixels to scroll by vertically
 7      */
 8     public void scrollBy(int x, int y) {
 9         scrollTo(mScrollX + x, mScrollY + y);
10     }

 

scrollTo是移动到这个点,scrollBy是相对view当前的位置去偏移位置,

scrollTo(int x,int y):

如果偏移位置发生了改变,就会给mScrollX和mScrollY赋新值,改变当前位置。

注意:x,y代表的不是坐标点,而是偏移量。

例如:

我要移动view到坐标点(100,100),那么我的偏移量就是(0,,0) - (100,100) = (-100 ,-100) ,我就要执行view.scrollTo(-100,-100),达到这个效果。也就是永远都相对于0,0点。

 

scrollBy(int x,int y):

从源码中看出,它实际上是调用了scrollTo(mScrollX + x, mScrollY + y);

mScrollX + x和mScrollY + y,即表示在原先偏移的基础上在发生偏移,通俗的说就是相对我们当前位置偏移。

例如:

scrollBy(-100,-100)相对于view的当前位置去偏移-100,100,第一调用也就是0,0点 第2次调用当前位置就是-100,100。

 

demo:

http://download.csdn.net/detail/vipzjyno1/7260923