ScrollerCompat的简单用法。

这个是v4的组件,用法和Scroller用法差不多。第一步是调用Create方法构造对象。第二步是在computeScroll里面实现重新布局。第三步是startScroll函数。

注意要调用postInvalidate()进行重画。

测试代码如下。


package io.github.nianhua110.scrollertest;

import android.content.Context;
import android.support.v4.widget.ScrollerCompat;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.Button;
import android.widget.LinearLayout;

/**
 * Created by kankan on 2016/5/15.
 */
public class TestScrollerClass extends LinearLayout {
    ScrollerCompat scrollerCompat;
    Button button;
    public TestScrollerClass(Context context) {
        super(context);
        init(context);
    }

    public TestScrollerClass(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    void init(Context context){
        button = new Button(context);
        button.setText("cd");
        addView(button);
        //第一步,创造对象
        scrollerCompat = ScrollerCompat.create(context);
        //scrollerCompat.startScroll(0,0, 10,10, 1000);
        //postInvalidate();
    }
    public void startScroller(){

            Log.d("sd", "start scroller");
            //第三步,启动滑动
            scrollerCompat.startScroll(0, 100, 500, 8, 1000);
            postInvalidate();

    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        button.layout(button.getLeft(), button.getTop(), button.getRight(), button.getBottom());
        Log.i("sd", "number is "+ button.getLeft());

    }

    @Override
    public void computeScroll() {
        super.computeScroll();
        //第二步,响应computerScroll函数,一定要在计算完位置后调用,通过computeScrollOffset函数的返回值判断
        if(scrollerCompat.computeScrollOffset()) {
            Log.i("sd", "computeScroll" + scrollerCompat.getCurrX());
            button.layout(scrollerCompat.getCurrX(), button.getTop(), scrollerCompat.getCurrX() + button.getMeasuredWidth(), button.getBottom());
            postInvalidate();
        }
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        Log.i("sd", "on Measure");
    }
}
完整代码可以下载 点击下载,记得Star


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值