Android超简单实现金钱滚动效果

目录

Android超简单实现金钱滚动效果_第1张图片
目录

效果展示

Android超简单实现金钱滚动效果_第2张图片

实现原理

Android超简单实现金钱滚动效果_第3张图片

利用ValueAnimator将数值从0一直增长到你所需要展示的数值,然后使用TextView将增长过程中的数值不断展示即可实现金钱的滚动效果。

ValueAnimator基础讲解

ValueAnimator是Android中用来实现属性动画的类,它是Android3.0后才引入的,它可以实现将数值从某一个值到某一个值的变化,比如ValueAnimator.ofInt(10,100)就可以实现数值从10到100的变化,而此方法的参数类型是可变长度的参数,即可以传入多个数值,比如ValueAnimator.ofInt(10,100,20)则可实现数值从10到100到20的变化,那么我们如何获取期间变化的值呢?这里我们通过valueAnimator.addUpdateListener()添加一个监听事件来获取,而动画的时长可以用setDuration()方法来设置。

ValueAnimator mValueAnimator = ValueAnimator.ofInt(0,100);
        mValueAnimator.setDuration(1000);//动画时间为1秒
        mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                int value = (int) animation.getAnimatedValue();//获取期间变化的值
            }
        });

实现效果(代码展示)

public class RunnTextView extends TextView {
    private ValueAnimator mValueAnimator;
    private DecimalFormat mDf;

    public RunnTextView(Context context) {
        this(context,null);
    }
    public RunnTextView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,0);
    }
    public RunnTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }
    private void init() {
        //格式化小数(保留小数点后两位)
        mDf = new DecimalFormat("0.00");
        initAnim();
    }
    /**
     * 初始化动画
     */
    private void initAnim() {
        mValueAnimator = ValueAnimator.ofFloat(0,0);//由于金钱是小数所以这里使用ofFloat方法
        mValueAnimator.setDuration(1000);//动画时间为1秒
        mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                float value = (float) animation.getAnimatedValue();
                if(value>0){//当数值大于0的时候才赋值
                    setText(mDf.format(value));
                }
            }
        });
    }
    /**
     * 设置要显示的金钱
     * @param money
     */
    public void setMoney(float money){
        mValueAnimator.setFloatValues(0,money);//重新设置数值的变化区间
        mValueAnimator.start();//开启动画
    }
    /**
     * 取消动画和动画监听(优化内存)
     */
    public void cancle(){
       mValueAnimator.removeAllUpdateListeners();//清除监听事件
       mValueAnimator.cancel();//取消动画
    }
}

项目源码:https://github.com/myml666/RunnTextView

你可能感兴趣的:(Android超简单实现金钱滚动效果)