package com.daoge.widget;

import java.text.DecimalFormat;

import android.os.CountDownTimer;
import android.widget.TextView; public class DanceWageTimer extends CountDownTimer { public static final int INTERVAL_ONE = 20;
public static final int INTERVAL_TWO = 40; private TextView textView;
private float totalWage;
private int startNum = 0;//从多少开始累加
private int increased;//每次加多少
private int decimals;
private int decimalFlag = 0;//记录小数部分的累加
private long totalExecuteTime;
private long interval;
public DanceWageTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
} public DanceWageTimer(long millisInFuture, long countDownInterval, TextView textView, float totalWage) {
super(millisInFuture, countDownInterval);
this.textView = textView;
this.totalWage = totalWage;
this.totalExecuteTime = millisInFuture;
this.interval = countDownInterval;
startNum = DanceWageTimer.getStartNum(totalWage);
decimals = (int) ((totalWage - getIntegerOfWage(totalWage)) * 100);
increased = DanceWageTimer.getIncreased(startNum);
} @Override
public void onFinish() {
DecimalFormat decFormat = new DecimalFormat("##0.00");
String result = decFormat.format(totalWage);
textView.setText(result);
} @Override
public void onTick(long arg0) {
startNum += increased;
if (decimalFlag < decimals) {
if (totalExecuteTime / interval < decimals) {
decimalFlag += 2;
} else {
decimalFlag++;
}
}
if (decimalFlag < 10) {
textView.setText(startNum + ".0" + decimalFlag);
} else {
textView.setText(startNum + "." + decimalFlag);
} } /**
* @Title getTotalExecuteTime
* @Description 得到总共执行的时间
* @param totalWage
* @return
*/
public static int getTotalExecuteTime(float totalWage, int interval) {
int wage = getIntegerOfWage(totalWage);
int startNum = getStartNum(totalWage);
int increased = getIncreased(startNum);
int result = (wage - startNum) / increased * interval;
return result;
} /**
* @Title getStartNum
* @Description 得到从多少开始累加
* @param totalWage
* @return
*/
public static int getStartNum(float totalWage) {
int wage = getIntegerOfWage(totalWage);
if (wage / 10000 >= 1) {
return 10000;
} else if (wage / 1000 >= 1) {
return 1000;
} else if (wage / 100 >= 1) {
return 100;
} else if (wage / 10 >= 1) {
return 10;
} else {
return 0;
}
} /**
* @Title getIncreased
* @Description 得到每次加多少
* @param start
* @return
*/
private static int getIncreased(int start) {
int increased = 0;
if (start >= 10000) {
increased = 1299;
} else if (start >= 1000) {
increased = 99;
} else if (start >= 100) {
increased = 7;
} else if (start >= 10) {
increased = 1;
} else {
increased = 1;
}
return increased;
} public static int getIntegerOfWage(float totalWage) {
return (int) totalWage;
} }

  

CountDownTimer的更多相关文章

  1. Android使用CountDownTimer倒计时

    1.布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android ...

  2. 拓展 Android 原生 CountDownTimer 倒计时

    拓展 Android 原生 CountDownTimer 倒计时 [TOC] CountDownTimer 在系统的CountDownTimer上进行的修改,主要是拓展了功能,当然也保留了系统默认的模 ...

  3. [Android Pro] CountDownTimer倒计时

    定时执行在一段时候后停止的倒计时,在倒计时执行过程中会在固定间隔时间得到通知(译者:触发onTick方法),下面的例子显示在一个文本框中显示一个30s倒计时: new CountdownTimer(3 ...

  4. Android CountDownTimer倒计时器的使用

    http://blog.csdn.net/freesonhp/article/details/25904047 在平时我们编程的时候,经常会用到倒计时这个功能,很多人不知道Android已经帮封装好了 ...

  5. Android CountDownTimer 倒计时

    摘自:http://www.cnblogs.com/over140/archive/2011/12/20/2294220.html 继承关系 public abstract class CountDo ...

  6. Android基础之CountDownTimer 倒计时类

    app常用的60s倒计时计时功能: private static final int TIME_LIMIT = 60; private void initView() { // 相关控件 mResen ...

  7. android CountDownTimer

    最近进行的项目使用的定时功能,我发现了一个非常容易使用内置类CountDownTimer.当然,可以使用这种效果TimerTask + Timer为了实现.只是我个人的意见CountDownTimer ...

  8. Android利用CountDownTimer类实现倒计时功能

    public class MainActivity extends Activity { private MyCount mc; private TextView tv; @Override publ ...

  9. Android中使用Handler以及CountDownTimer实现包含倒计时的闪屏页面

    上一篇博文<Android中Handler使用浅析>通过实现倒计时闪屏页面的制作引出了Handler的使用方法以及实现原理,博文末尾也提到了实现过程中的Bug,有兴趣的朋友可以点击链接回去 ...

  10. android 定时器(Handler Timer Thread AlarmManager CountDownTimer)

    Android实现定时任务一般会使用以上(Handler Timer Thread AlarmManager CountDownTimer)五种方式.当然还有很多组合使用(比如Handler+Thre ...

随机推荐

  1. vue 设置头文件

    vue的头文件是在index.html文件中设置的,毕竟vue的入口 先说一下标签页的名字: 就是这个名字的设置,要想每个标签页的名字都不一样,需要做以下这三步:1. 首先,在index.html文件 ...

  2. Python 多核 多线程 调度

    参考: http://www.oschina.net/translate/pythons-hardest-problem https://news.ycombinator.com/item?id=58 ...

  3. c# redis 利用锁(StackExchange.Redis LockTake)来保证数据在高并发情况下的正确性

    之前有写过一篇介绍c#操作redis的文章 http://www.cnblogs.com/axel10/p/8459434.html ,这篇文章中的案例使用了StringIncrement来实现了高并 ...

  4. 连接mysql

    1.nuget  所搜MySql.Data 2.appsettings.json { "ConnectionStrings": { "DefaultConnection& ...

  5. MAC(Linux)升级Openssl

    系统上一般默认安装的是0.9.8版本的Openssl,不能满足需要.这时候就要重新安装Openssl. 上官网下载新版openssl:https://www.openssl.org/source/ 解 ...

  6. Java中获取当前时间并格式化

    主要有两种方式,其中使用Date比较好控制,代码如下: //使用Calendar Calendar now = Calendar.getInstance(); System.out.println(& ...

  7. Docker 创建image

      images 是containers的基础.每次使用docker run 命令都要指定image.   列出本地images   zane@zane-V:~$ docker images REPO ...

  8. Android Studio +MAT 分析内存泄漏实战

    对于内存泄漏,在Android中如果不注意的话,还是很容易出现的,尤其是在Activity中,比较容易出现,下面我就说下自己是如何查找内存泄露的. 首先什么是内存泄漏? 内存泄漏就是一些已经不使用的对 ...

  9. 修改linux iptable规则

    -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT(允许80端口通过防火墙)-A INPUT -m state --sta ...

  10. Js删除Table中的一行

    <html> <head> <title></title> <script type="text/javascript"> ...