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

本文深入解析了scrollTo和scrollBy的区别,并通过实现案例展示了它们的使用方式,包括移动效果的实现、按钮事件处理以及移动效果的刷新机制。详细介绍了如何在移动过程中实现平滑过渡和动画效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


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


scrollTo(intabsoluteX,int absoluteY)


执行N :


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


scrollBy(intdeltaX,int deltaY)


执行第一次 :



再执行一次 :



后面的一次类推!


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


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


还是用同样这个专题的同一个工程,调整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();
            }

        });

运行效果:移动后的效果

程序在处理按钮事件时:

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();
            }

        });


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

        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();
            }

        });


再点击几次:


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值