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

目录

目录

效果展示

实现原理


利用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 动画】 动画分类补间动画(Tween动画)帧动画(Frame 动画)属性动画(Property ...
    Rtia阅读 6,270评论 1 38
  • 1 背景 不能只分析源码呀,分析的同时也要整理归纳基础知识,刚好有人微博私信让全面说说Android的动画,所以今...
    未聞椛洺阅读 2,776评论 0 10
  • 属性动画 属性动画出现的原因 属性动画(Property Animation)是在 Android 3.0(API...
    luoqiang108阅读 1,206评论 0 1
  • 动画基础概念 动画分类 Android 中动画分为两种,一种是 Tween 动画、还有一种是 Frame 动画。 ...
    Rtia阅读 1,270评论 0 6
  • 在网上看到漂亮的玻璃珠,临时兴起就临摹了几个,没找到合适大小的圆形物,就徒手画了几个圆圈,为了画得圆一些,这几个圆...
    点线面2018阅读 501评论 4 3