ScrollTo和ScrollBy的区别

View类ScrollTo的源码  
public void scrollTo(int x, int y) {
    //当传进来的参数与当前的mScrollX或mScrollY不一样才进行改变
        if (mScrollX != x || mScrollY != y) {
    //定义oldX,oldY来接收原来的ScrollX,ScrollY
            int oldX = mScrollX;
            int oldY = mScrollY;
    //将传进来的参数赋值给没ScrollX,ScrollY
            mScrollX = x;
            mScrollY = y;
            invalidateParentCaches();//刷新页面
    //这是一个回调方法,用protected修饰,外部不能调用,用于自定义View复写
            onScrollChanged(mScrollX, mScrollY, oldX, oldY);
            if (!awakenScrollBars()) {
                postInvalidateOnAnimation();
            }
        }
    }

View类ScrollBy的源码
   public void scrollBy(int x, int y) {
    //在原来的基础上增加x,y个像素,实际上还是调用ScrollTo方法
        scrollTo(mScrollX + x, mScrollY + y);
    }

下面来说一说什么是ScrollX和ScrollY,对应View类的字段mScrollX,mScrollY

View类还提供了setScrollX,setScrollY,getScrollX,getScrollY方法
 public void setScrollX(int value) {
    //从这里可以看出,setScrollX方法也还是调用scrollTo方法,只不过在y方向,也就是ScrollY不变,
     //只是将X方向移动到指定位置
        scrollTo(value, mScrollY);
 }
//setScrollY方法同setScrollX方法
 public void setScrollY(int value) {
        scrollTo(mScrollX, value);
  }

//getScrollX,getScrollY将mScrollX,mScrollY返回,获取当前的位置
 public final int getScrollX() {
        return mScrollX;
  }
public final int getScrollY() {
        return mScrollY;
 }

//onScrollChanged为回调方法,用于自定义View复写,具体调用在scrollTo中,当视图发生改变时回调该方法该方法前两个参数实际就是mScrollX,和mScrollY  ;后两个参数分别是原来的ScrollX,ScrollY
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        if (AccessibilityManager.getInstance(mContext).isEnabled()) {
            postSendViewScrolledAccessibilityEventCallback();
        }
        mBackgroundSizeChanged = true;
        final AttachInfo ai = mAttachInfo;
        if (ai != null) {
            ai.mViewScrollChanged = true;
        }
}












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值