android 布局滑动中scrollTo 和 scrollBy 方法使用说明

本文详细解析了Android中scrollTo与scrollBy方法的工作原理,包括它们如何改变视图的偏移量,以及如何触发视图的重新绘制。此外,还介绍了mScrollX和mScrollY变量的含义,并给出了具体的使用示例。

首先,看源码:

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);
          if (!awakenScrollBars()) {
              invalidate();
          }
      }
  }
 public void scrollBy(int x, int y) {
        scrollTo(mScrollX + x, mScrollY + y);
    }

从源码中可以看到,scrollBy()的内部其实是调用了scrollTo()。在scrollTo()中,调用了onScrollChanged()和invalidate()。onScrollChanged()的作用就是告诉系统(可以理解为Android框架),这个View的scrollTo()或scrollBy()曾经被调用过;而invalidate()是告诉系统,这个View需要被重新绘制。

mScrollX:表示离视图起始位置的x水平方向的偏移量
mScrollY:表示离视图起始位置的y垂直方向的偏移量

分别通过getScrollX() 和getScrollY()方法获得。 注意:mScrollX和mScrollY指的并不是坐标,而是偏移量。

scrollTo(int x,int y):

如果偏移位置发生了改变,就会给mScrollX和mScrollY赋新值,改变当前位置。 #####注意:x,y代表的不是坐标点,而是偏移量。 例如: 我要移动view到坐标点(100,100),那么我的偏移量就是:原位置坐标-目标位置坐标=偏移量 (0,,0) - (100,100) = (-100 ,-100) ,我就要执行view.scrollTo(-100,-100),达到这个效果。

scrollBy(int x,int y):

从源码中看出,它实际上是调用了scrollTo(mScrollX + x, mScrollY + y); mScrollX + x和mScrollY + y,即表示在原先偏移的基础上在发生偏移,通俗的说就是相对我们当前位置偏移。 由于sctrollTo只是移动了内容content,所以是父类VIEW里面的所有子控件在移动,而父容器ViewGroup并没有移动,也就是说位置它还占用着,移动子控件的时候,子控件只能在容器里面移动,如果子控件移动到了超出的地方(父控件的范围),那么超出的位置就不会显示了。

转载于:https://my.oschina.net/byronhs/blog/714132

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值