<declare-styleable name="NumberRollingView">
<!--帧数-->
<attr name="frameNum" format="integer"></attr>
<!--内容的格式-->
<attr name="textType">
<enum name="money" value="0"></enum>
<enum name="num" value="1"></enum>
</attr>
<!--是否设置每三位数字一个逗号-->
<attr name="useCommaFormat" format="boolean"></attr>
<!--是否当内容改变的时候使用动画,反之则不使用动画-->
<attr name="runWhenChange" format="boolean"></attr>
</declare-styleable>
<com.wiggins.digitalchange.widget.NumberRollingView android:id="@+id/tv_money" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0.00" android:textColor="@color/white" android:textSize="@dimen/font_max" android:textStyle="bold" /> <com.wiggins.digitalchange.widget.NumberRollingView android:id="@+id/tv_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0" android:textColor="@color/white" android:textSize="@dimen/font_max" android:textStyle="bold" app:textType="num" />
tvMoney.setContent("9686.86");
tvNum.setContent("9686");
/**
* @param str 字符串只能为两位小数或者整数
* @param isDecimal 是否是小数
* @Description 格式化字符串,每三位用逗号隔开
*/
public static String addComma(String str, boolean isDecimal) {
//先将字符串颠倒顺序
str = new StringBuilder(str).reverse().toString();
if (str.equals("0")) {
return str;
}
String str2 = "";
for (int i = 0; i < str.length(); i++) {
if (i * 3 + 3 > str.length()) {
str2 += str.substring(i * 3, str.length());
break;
}
str2 += str.substring(i * 3, i * 3 + 3) + ",";
}
if (str2.endsWith(",")) {
str2 = str2.substring(0, str2.length() - 1);
}
//最后再将顺序反转过来
String temp = new StringBuilder(str2).reverse().toString();
if (isDecimal) {
//去掉最后的","
return temp.substring(0, temp.lastIndexOf(",")) + temp.substring(temp.lastIndexOf(",") + 1, temp.length());
} else {
return temp;
}
}
/**
* @Description 开始金额数字动画的方法
*/
public void startMoneyAnim(String moneyStr) {
// 如果传入的数字已经格式化了,则将包含的符号去除
String money = moneyStr.replace(",", "").replace("-", "");
try {
finalMoneyNum = Double.parseDouble(money);
if (finalMoneyNum == 0) {
// 如果传入的数字为0则直接使用setText()进行显示
NumberRollingView.this.setText(moneyStr);
return;
}
nowMoneyNum = 0;
threadPool.execute(new Runnable() {
@Override
public void run() {
Message msg = handler.obtainMessage();
// 将传入的数字除以帧数,得到每帧间隔的大小
double size = finalMoneyNum / frameNum;
msg.what = MONEY_TYPE;
// 如果每帧的间隔小于0.01,则设置间隔为0.01
msg.obj = size < 0.01 ? 0.01 : size;
// 发送消息改变UI
handler.sendMessage(msg);
}
});
} catch (NumberFormatException e) {
e.printStackTrace();
//如果转换Double失败则直接用setText()
NumberRollingView.this.setText(moneyStr);
}
}
/**
* @Description 开始数字动画的方法
*/
public void startNumAnim(String numStr) {
// 如果传入的数字已经格式化了,则将包含的符号去除
String num = numStr.replace(",", "").replace("-", "");
try {
finalNum = Integer.parseInt(num);
if (finalNum < frameNum) {
// 如果传入的数字比帧数小,则直接使用setText()
NumberRollingView.this.setText(numStr);
return;
}
// 默认从0开始动画
nowNum = 0;
threadPool.execute(new Runnable() {
@Override
public void run() {
Message msg = handler.obtainMessage();
// 将传入的数字除以帧数,得到每帧间隔的大小
int temp = finalNum / frameNum;
msg.what = NUM_TYPE;
msg.obj = temp;
// 发送消息改变UI
handler.sendMessage(msg);
}
});
} catch (NumberFormatException e) {
e.printStackTrace();
//如果转换Integer失败则直接用setText
NumberRollingView.this.setText(numStr);
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有