android系统以手机屏幕左上角为坐标原点建立直角坐标系,x轴方向与笛卡尔坐标系相同,y轴方向与笛卡尔坐标系相反,
获取控件在parent中的相对位置可以使用getLeft(),getRight(),getTop(),getBottom()这四个方法,此处不详解,
查看View中源码,在这个类中有mScrollX和mScrollY两个变量用于存储控件移动的位移,而getScrollY和getScrollX返回的即是相对应的mScrollX以及mScrollY,所以,getScrollX以及getScrollY获取的是移动事件的位移。(即为控件左上角当前相对于屏幕左上角为坐标原点的坐标x和y)
View中scrollTo()代码如下
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最终调用的是onScrollChanged()方法,此方法是控制滑动的,此处不细究,有兴趣可以去深究,那么,由此可以看到scrollTo方法是将控件移动到相对于屏幕左上角坐标原点的x、y位置。
scrollBy的代码如下:
public void scrollBy(int x, int y) {
scrollTo(mScrollX + x, mScrollY + y);
}
scrollBy封装了scrollTo方法,移动的是与当前位置的相对坐标。
另,在MotionEvent中,event.getX()获取的是当前位置相对于控件左上角为坐标原点的坐标值,event.getRawX()则是当前位置相对于屏幕左上角为坐标原点的值
最后 附图一张