Android View Scroller类,scrollTo(...)和scrollBy(...)方法

由于一部分网友有点分不清


scrollBy和scrollTo这个两区别,其实我觉得很简单,下面给出一个基本示意图:


scrollTo(intabsoluteX,int absoluteY)


执行N :

Android View Scroller类,scrollTo(...)和scrollBy(...)方法_第1张图片


从上面可知,上面的始终是相对第一次的位置坐标移动


scrollBy(intdeltaX,int deltaY)


执行第一次 :


Android View Scroller类,scrollTo(...)和scrollBy(...)方法_第2张图片


再执行一次 :

Android View Scroller类,scrollTo(...)和scrollBy(...)方法_第3张图片



后面的一次类推!


从上面看,位置将不断的发生变化.


从上面可知,上面的始终是相对上一次的位置坐标移动,请注意上一次和第一次的区别.


还是用同样这个专题的同一个工程,调整DurianLinearLayout.java,自己实现:

private Scroller mScroller;


mScroller = new Scroller(context, new DecelerateInterpolator(2.0F));
第二个参数是View移动加速效果设置,即移动越来越快,或者越来越慢等效果.


@Override
    public void computeScroll() {
        // TODO Auto-generated method stub
        super.computeScroll();

        if (mScroller.computeScrollOffset()) {
            scrollTo(mScroller.getCurrX(), 0);
        }

    }

mLinearButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                 mScroller.startScroll(0, 0, -300, 0, 600);
                // scrollTo(250, 0);
                // scrollBy(50, 0);
                 postInvalidate();
            }

        });

运行效果:移动后的效果

Android View Scroller类,scrollTo(...)和scrollBy(...)方法_第4张图片

程序在处理按钮事件时:

mScroller.startScroll(0, 0, -300, 0, 600);

但是不会立即刷新,这个时候还需要通知父容器,刷新:

postInvalidate();

通知刷新以后,开始执行下面的实现方法.看android源代码,父类中的这个方法是空的,最终是需要子类实现的

@Override
    public void computeScroll() {
        // TODO Auto-generated method stub
        super.computeScroll();

        if (mScroller.computeScrollOffset()) {
            scrollTo(mScroller.getCurrX(), 0);
        }

    }


然后将上面的程序重新调整:


        mLinearButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
//                 mScroller.startScroll(0, 0, -300, 0, 600);
                 scrollTo(250, 0);
                // scrollBy(50, 0);
//                 postInvalidate();
            }

        });

Android View Scroller类,scrollTo(...)和scrollBy(...)方法_第5张图片


然后将上面程序继续调整:

        mLinearButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
//                 mScroller.startScroll(0, 0, -300, 0, 600);
//                 scrollTo(250, 0);
                 scrollBy(50, 0);
                 postInvalidate();
            }

        });


再点击几次:


根据上面的测试结果,和前面分析的是一致的.

你可能感兴趣的:(Android,View嵌套和事件传递手稿)