用做数学证明题的思维对android Scroller类的核心方法进行详解

来源:互联网 发布:centos源码安装git 编辑:程序博客网 时间:2024/06/05 20:39

当然是先贴源代码

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(x,0)由源代码得出,x就是新的水平偏移量(mscrollx=x);所以如果x是正,表示向左在滚动。
    为什么是向左,因为原来的坐标是(0,0),假设现在滚动到(-10,0),那么view内容自然是向左在移动,此时mscrollx的计算公式就是0-(-10),用old-new.
    调用startScroll(startx,starty,dx,dy);表示直接从mscrollx等于startx的地方开始滚动,到mscrollx等于startx+dx的地方结束滚动

    由此可以看出mscrollx的值有个区间,就是从statx----startx+dx递次变化
    由上面scrollTo(新的mscrollx,新的mscrolly)和mScroller.getCurrX()=mScrollX,
    所以调用
     if(mScroller.computeScrollOffset()){//用来判断滚动是否结束
            scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
            postInvalidate();
    }
    就能达成滚动需求。
    这也可以看出startScroll()只是标注了mScroller的变化区间,
    实际的滚动需要重写computeScroll()方法,调用scrollTo完成滚动需求。

 最后提几点常用的但是容易忽略的知识点,
1,scrollTo和scrollBy,computeScroll()是view的方法
2,startScroll是Scroller的方法
3,smoothScrollTo是ScrollView的方法



0 0
原创粉丝点击