Android 数字滚动的效果

    public class CountUpTextView extends android.support.v7.widget.AppCompatTextView {
    private static int DURATION = 1000;
    //金币
    private int intNumber = 0;
    private float floatNumber = 0;
    //现金
    private float moneyNumber = 0.0f;

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

    public void setNumberText(int newNumber) {
        if (newNumber > intNumber) {//当新数字大于旧数字则调用动画,否则直接展示
            runWithIntAnimation(intNumber, newNumber);
        } else {
            setText(newNumber + "");
        }
        this.intNumber = newNumber;
    }
    public void setNumberText(float newNumber, int dot) {
        if (newNumber > floatNumber) {
            runWithFloatAnimation(floatNumber, newNumber, dot);
        } else {
            if ((int)newNumber - newNumber == 0) {
                setText((int)newNumber + "");
            } else {
                setText(String.format(Locale.getDefault(), "%." + dot + "f", newNumber));
            }
        }
        this.floatNumber = newNumber;
    }

    public void setNumber(int newNumber) {
        this.intNumber = newNumber;
        this.floatNumber = (float)newNumber;
    }

    public void setNumber(float newNumber) {
        this.intNumber = (int)newNumber;
        this.floatNumber = newNumber;
    }

    public void resetNumber() {
        intNumber = 0;
        floatNumber = 0;
        moneyNumber = 0.0f;
    }


    /**
     * 整数显示
     *
     * @param oldNumber
     * @param newNumber
     */
    public void runWithIntAnimation(int oldNumber, int newNumber) {
        ValueAnimator valueAnimator = ValueAnimator.ofInt(oldNumber, newNumber);
        valueAnimator.setDuration(DURATION);
        valueAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                setText(valueAnimator.getAnimatedValue().toString());
            }
        });
        valueAnimator.start();
    }

    /**
     * 浮点显示
     *
     * @param oldNumber
     * @param newNumber
     */
    public void runWithFloatAnimation(float oldNumber, float newNumber, final int dot) {//参数分别为:旧数字,新数字,小数后几位
        ValueAnimator valueAnimator = ValueAnimator.ofFloat(oldNumber, newNumber);
        valueAnimator.setDuration(DURATION);
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                float number = (float)valueAnimator.getAnimatedValue();
                if ((int)number - number == 0) {
                    setText((int)number + "");
                } else {
                    setText(String.format(Locale.getDefault(), "%." + dot + "f", valueAnimator.getAnimatedValue()));
                }
            }
        });
        valueAnimator.start();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值