android 数字递增动画,Android TextView数字增长动画效果

/*** Created by dingchao on 2018/3/27.*/

public class DcTextViewRunNumber extendsTextView {/*** 延迟*/

private final int DELAY = 20;/*** 保留小数位数 默认2为*/

private final int DECIMALS_COUNT = 2;private final int START_RUN = 101;private final int STOP_RUN = 102;/*** 跑的次数*/

private final int RUN_COUNT = 40;private floatspeed;private floatstartNum;private floatendNum;/*** 保留小数位数*/

private int decimals =DECIMALS_COUNT;/*** 每次跑的次数*/

private int runCount =RUN_COUNT;/*** 动画延迟*/

private int delayMillis =DELAY;private booleanisAniming;private Handler mHandler = newHandler() {public voidhandleMessage(Message msg) {if (msg.what ==START_RUN) {if(speed==0){if(endNum!=0){

speed=getSpeed();

startNum=speed;

}else{return;

}

}

isAniming= !running();if(isAniming) {

sendEmptyMessageDelayed(START_RUN, delayMillis);

}else{

speed= 0;

startNum= 0;

}

}

};

};publicDcTextViewRunNumber(Context context) {super(context);

}publicDcTextViewRunNumber(Context context, AttributeSet attrs) {super(context, attrs);

}public DcTextViewRunNumber(Context context, AttributeSet attrs, intdefStyleAttr) {super(context, attrs, defStyleAttr);

}/*** 开始数字跳动动画

*@return动画是否结束*/

private booleanrunning() {

setText(withDEC(String.valueOf(startNum))+ "");

startNum+=speed;if(startNum >=endNum){

setText(withDEC(String.valueOf(endNum))+ "");return true;

}return false;

}/*** 计算速度

*@return

*/

private floatgetSpeed(){float speedFloat = withDEC(String.valueOf(endNum/runCount)).floatValue();returnspeedFloat;

}/*** 判断是否是非负数

*@return

*/

private booleanisNumber(String num){if("".equals(num) || num==null)return false;

Pattern pattern= Pattern.compile("^\\d+$|\\d+\\.\\d+$");

Matcher matcher=pattern.matcher(num);returnmatcher.find();

}/*** 取整四舍五入 保留小数

*@paramnum

*@return

*/

privateBigDecimal withDEC(String num){return newBigDecimal(num).setScale(decimals, BigDecimal.ROUND_HALF_UP);

}/*** 设置显示的数字

*@paramnum*/

public voidsetShowNum(String num){

setShowNum(num,DECIMALS_COUNT);

}/*** 设置显示的数字

*@paramnum

*@paramdecimals 要保留的小数位*/

public void setShowNum(String num,intdecimals){if(!isNumber(num)){return;

}

setText(num);

setDecimals(decimals);

}/*** 开始跑*/

public voidstartRun(){if(isAniming){return;

}if(isNumber(getText().toString())){

endNum=withDEC(getText().toString()).floatValue();

mHandler.sendEmptyMessage(START_RUN);

}

}public intgetDecimals() {returndecimals;

}/*** 设置保留的小数位 0:不保留小数

*@paramdecimals*/

public void setDecimals(intdecimals) {if(decimals>=0){this.decimals =decimals;

}

setText(withDEC(getText().toString())+"");

}public intgetRunCount() {returnrunCount;

}/*** 设置动画跑的次数

*@paramrunCount*/

public void setRunCount(intrunCount) {if(runCount<=0){return;

}this.runCount =runCount;

}public intgetDelayMillis() {returndelayMillis;

}/*** 设置动画延迟

*@paramdelayMillis*/

public void setDelayMillis(intdelayMillis) {this.delayMillis =delayMillis;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值