https://github.com/sd6352051/RiseNumber


package com.gitonway.lee.risenumber.lib;import android.content.Context;import android.util.AttributeSet;import android.widget.TextView;import com.nineoldandroids.animation.ValueAnimator;import java.text.DecimalFormat;/** * Created by lee on 2014/7/29. */public class RiseNumberTextView extends TextView implements RiseNumberBase {    private static final int STOPPED = 0;    private static final int RUNNING = 1;    private int mPlayingState = STOPPED;    private float number;    private float fromNumber;    private long duration = 1500;    /**     * 1.int 2.float     */    private int numberType = 2;    private DecimalFormat fnum;    private EndListener mEndListener = null;    final static int[] sizeTable = {9, 99, 999, 9999, 99999, 999999, 9999999,            99999999, 999999999, Integer.MAX_VALUE};    public RiseNumberTextView(Context context) {        super(context);    }    public RiseNumberTextView(Context context, AttributeSet attr) {        super(context, attr);    }    public RiseNumberTextView(Context context, AttributeSet attr, int defStyle) {        super(context, attr, defStyle);    }    public interface EndListener {        public void onEndFinish();    }    public boolean isRunning() {        return (mPlayingState == RUNNING);    }    private void runFloat() {        ValueAnimator valueAnimator = ValueAnimator.ofFloat(fromNumber, number);        valueAnimator.setDuration(duration);        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator valueAnimator) {                setText(fnum.format(Float.parseFloat(valueAnimator.getAnimatedValue().toString())));                if (valueAnimator.getAnimatedFraction() >= 1) {                    mPlayingState = STOPPED;                    if (mEndListener != null)                        mEndListener.onEndFinish();                }            }        });        valueAnimator.start();    }    private void runInt() {        ValueAnimator valueAnimator = ValueAnimator.ofInt((int) fromNumber, (int) number);        valueAnimator.setDuration(duration);        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator valueAnimator) {                setText(valueAnimator.getAnimatedValue().toString());                if (valueAnimator.getAnimatedFraction() >= 1) {                    mPlayingState = STOPPED;                    if (mEndListener != null)                        mEndListener.onEndFinish();                }            }        });        valueAnimator.start();    }    static int sizeOfInt(int x) {        for (int i = 0; ; i++)            if (x <= sizeTable[i])                return i + 1;    }    @Override    protected void onFinishInflate() {        super.onFinishInflate();        fnum = new DecimalFormat("##0.00");    }    @Override    public void start() {        if (!isRunning()) {            mPlayingState = RUNNING;            if (numberType == 1)                runInt();            else                runFloat();        }    }    @Override    public RiseNumberTextView withNumber(float number) {        this.number = number;        numberType = 2;        if (number > 1000) {            fromNumber = number - (float) Math.pow(10, sizeOfInt((int) number) - 2);        } else {            fromNumber = number / 2;        }        return this;    }    @Override    public RiseNumberTextView withNumber(int number) {        this.number = number;        numberType = 1;        if (number > 1000) {            fromNumber = number - (float) Math.pow(10, sizeOfInt((int) number) - 2);        } else {            fromNumber = number / 2;        }        return this;    }    @Override    public RiseNumberTextView setDuration(long duration) {        this.duration = duration;        return this;    }    @Override    public void setOnEnd(EndListener callback) {        mEndListener = callback;    }}

package com.gitonway.lee.risenumber.lib;/** * Created by lee on 2014/7/29. */public interface RiseNumberBase {    public void start();    public RiseNumberTextView withNumber(float number);    public RiseNumberTextView withNumber(int number);    public RiseNumberTextView setDuration(long duration);    public void setOnEnd(RiseNumberTextView.EndListener callback);}


risenumberview.withNumber(int/float).setDuration(1500).start();


更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. thinkphp内置集成workerman以守护进程方
  2. 配置ssh远程登录sshd服务器
  3. 固定定位的联系客服+简易的三行三列布局
  4. php学习第三天
  5. 字体图标、布局原理以及盒模型实例操作及
  6. 固定定位,三行三列定位布局
  7. 商品信息表设计
  8. 图标,布局,元素类型,盒子模型
  9. web前端作业
  10. CSS基本选择器与上下文选择器