关闭

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

标签: androidscroller
118人阅读 评论(0) 收藏 举报
分类:

当然是先贴源代码

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:487次
    • 积分:43
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档