关于android:androidViewscrollTo滚动方向

首先看View#scrollTo(int x,int y),以x为例。当传入的x>0View内容产生了滚动,并且沿着x轴的负方向滚动。why???

scrollTo滚动的是View的内容。如果想通过scrollTo使某个view产生滚动,该当调用其父View的scrollTo办法。

来看源码。

先看View#scrollTo(int x,int y)源码。x间接被赋值给mScrollX

    #View.java
   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();
            }
        }
    }

对于一个View,当调用其父view的scrollTo办法使其从A点滚动到B点,再滚动到C点,此时view的mScrollX是其总(A->C)的滚动间隔,而不是阶段(A->B或者B->C)滚动间隔

在看View# invalidate(int l, int t, int r, int b) 这里的scrollX就是上一个办法传入的参数xl-scrollX是绘制区域的右边,r-scrollX是绘制区域的左边。x>0绘制区域就会左移;x<0绘制区域就会右移。

    #View.java
   public void invalidate(int l, int t, int r, int b) {
        final int scrollX = mScrollX;
        final int scrollY = mScrollY;
        invalidateInternal(l - scrollX, t - scrollY, r - scrollX, b - scrollY, true, false);
    }

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理