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); invalidate(); } }
public void scrollBy(int x, int y) { scrollTo(mScrollX + x, mScrollY + y); }
從源碼可以看出scrollBy最終也是調用了scrollto的方法,對同一個view調用兩次scrollTo(10,10)只會移動一次,而調用兩次scrollBy(10,10)會移動兩次,實際x方向移動的距離爲20.y方向也爲20
通常Android上應用一些炫酷的拖動的界面都是繼承重寫了viewgroup的一些方法,view 的computescroll方法會在父容器重繪時調用到(viewgroup的重繪必定會引起外層父容器的重繪,而父容器的重繪會在drawchild()方法中調用到child.computeScroll()).
4、view類中的mScrollX與mScrollY:scrollx、scrolly分別爲屏幕左邊緣在整個view的座標點的x、y座標,view的原點爲界面初始化時與屏幕左邊緣重疊時的點