目录
目录
效果展示
实现原理
利用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();//取消动画
}
}