Android开发-02 数字滚动实现

来源:互联网 发布:linux man 用法 编辑:程序博客网 时间:2024/05/18 03:05

提供两种数字滚动实现:

1.利用自定义控件(textview、view皆可)2.创建动画工具类

代码链接:https://github.com/tok-gogogo/NumberTextView

第一种实现方法

为控件添加动画,主要代码:

private void runFloat() {ValueAnimator valueAnimator = ValueAnimator.ofFloat(fromNumber, number);valueAnimator.setDuration(duration);valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator valueAnimator) {                if (flags) {                    setText(Utils.format(",##0.00").format(Double.parseDouble(valueAnimator.getAnimatedValue().toString())) + "");                    if (valueAnimator.getAnimatedValue().toString().equalsIgnoreCase(number + "")) {                        setText(Utils.format(",##0.00").format(Double.parseDouble(number + "")));                    }                } else {                    setText(Utils.format("##0.00").format(Double.parseDouble(valueAnimator.getAnimatedValue().toString())) + "");                    if (valueAnimator.getAnimatedValue().toString().equalsIgnoreCase(number + "")) {                        setText(Utils.format("##0.00").format(Double.parseDouble(number + "")));                    }                }                if (valueAnimator.getAnimatedFraction() >= 1) {                    mPlayingState = STOPPED;                    if (mEndListener != null)                        mEndListener.onEndFinish();                }            }        });        valueAnimator.start();   }

第二种实现方法

通过把我们要设置的数字拆分成了n个float组成的集合,然后在使用循环把这些float设置到TextView上。
主要利用了View的postDelayed(Runable action, int delayMillis)方法来达到动画效果。

    @Override    public void run() {        if (i>nums.length-1) {            view.removeCallbacks(Counter.this);            return;        }        view.setText(NumUtil.NumberFormat(nums[i++],2));        view.removeCallbacks(Counter.this);        view.postDelayed(Counter.this, pertime);    }
0 0
原创粉丝点击