经常搞混这三个东西的却别,今天在这里备份一下。
首先,Scroller是一个类,而scrollTo(int x, int y)和scrollBy(int x, int y)是类View的两个方法。
scrollTo(int x, int y)和scrollBy(int x, int y)是用来实现View的偏移的(另外可以实现View的偏移的方法还有offsetTopAndBottom(int offset)和offsetLeftAndRight(int offset))。
scrollTo(int x, int y)和scrollBy(int x, int y)的区别在于scrollTo(int x, int y)是滑动到指定的位置,而scrollBy(int x, int y)是在原来的位置基础上再滑动对应的距离。
Scroller是一个类,它通过方法startScroll(int startX, int startY, int dx, int dy, int duration)来模拟在duration时间里,我要从startX移动dx的偏移量,从startY移动dy的偏移量。但它只是模拟偏移量的变化,不具体实现。在模拟的偏移量的不断变化过程中它会不断的回调computeScrollOffset()方法,我们可以重载computScrollOffset()方法,也不断获取模拟的当前的偏移量,并通过scrollTo(int x, int y)或者scrollBy(int x, int y)来真正实现View的偏移量。(感觉Scroller和ValueAnimator很相似,ValueAnimator也是模拟从一个值到另一个值的的过程,并通过AnimatorUpdateListener来实现具体的操作)
“我们知道想把一个View偏移至指定坐标(x,y)处,利用scrollTo(int x, int y)方法直接调用就OK了,但我们不能忽视的是,该方法本身来的的副作用:非常迅速的将View偏移到目标点,而没有对这个偏移过程有任何控制,对用户而言可能是不太友好的。于是,基于这种偏移控制,Scroller类被设计出来了,该类的主要作用是为偏移过程制定一定的控制流程,从而使偏移更流畅,更完美。” --qinjuning (这段话总结的太好了)