Android View 中的scrollBy() scrollTo() getScrollY() getScrollX()

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()则是当前位置相对于屏幕左上角为坐标原点的值

最后 附图一张



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值