Andrid_scrollTo/scrollBy方法的区别

来源:互联网 发布:剑三捏脸数据不合法 编辑:程序博客网 时间:2024/06/08 19:31

我们都知道 View#scrollTo/scrollBy() 方法是用于 View 内容的滑动的。那么这两个方法有什么区别呢?

下面通过源码来总结这两个区别在哪里:

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

上面是两个方法的源码,可以清楚地看到 scrollBy 实际是调用 scrollTo 方法。那么 scrollTo 做了什么事?

根据传入的 x 和 y 值,赋值给当前的 mScrollX 和 mScrollY 两个值,这两个值是什么意思呢?它们分别表示当前 View 内容需要滑动的绝对位置

下面举例分析:
假设当前 View 的位置是在(60,70)的位置上,如果调用 scrollTo(-50,-50),那么当前 View 的内容直接滑动到(50,50)的位置上,结果 View 内容的位置为 (50,50)。

scrollBy 内部就是在当前 View 内容的位置的基础上再滑动 x 和 y 像素的距离,假设当前 View 内容的位置为(60,70),然后调用 scrollBy(-50,-50) 之后,View 内容会在水平向右滑动50px,竖直向下滑动 50px,结果 View 内容的位置为(110,120)。

这里写图片描述

结论: scrollTo 方法是实现 View 内容的绝对滑动,而 scrollBy 是实现 View 内容的相对滑动。

在上面有一点需要注意的是,我一直在强调 View 内容的滑动,而不是 View 的滑动,因为 scroll 就是实现的是 View 内容的滑动,View 本身的位置和顶点坐标并不会发生改变,这是需要注意的一点;

当 View 的内容的左边缘在 View 的左边缘的左边时,那么 scollX > 0,否则则相反;

当 View 的内容的顶部边缘在 View 的顶部边缘上边时,那么 scolY > 0,否则则相反;

这里写图片描述

0 0
原创粉丝点击