使用CounterDownTimer实现时分秒倒计时

使用android提供的android.os包中的 counterDownTimer可以很方便的实现倒计时功能,具体如下:

import android.os.CountDownTimer;

public class Couterdown extends CountDownTimer {

    public Couterdown(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onFinish() {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTick(long arg0) {

    }
    public String  toClock(long millisUntilFinished)

    {
        long hour = millisUntilFinished/(60*60*1000);
        long minute = (millisUntilFinished - hour*60*60*1000)/(60*1000);
        long second = (millisUntilFinished - hour*60*60*1000   - minute*60*1000)/1000;
        if(second >= 60 )
        {
          second = second % 60;
          minute+=second/60;
        }
        if(minute >= 60)
        {
          minute = minute %60;
          hour += minute/60;
        }
        String sh = "";
        String sm ="";
        String ss = "";
        if(hour <10)
        {
           sh = "0" + String.valueOf(hour);
        }else
        {
           sh = String.valueOf(hour);
        }
        if(minute <10)
        {
           sm = "0" + String.valueOf(minute);
        }else
        {
           sm = String.valueOf(minute);
        }
        if(second <10)
        {
           ss = "0" + String.valueOf(second);
        }else
        {
           ss = String.valueOf(second);
        }
        return sh +":"+ sm+":" + ss;
    }

}

首先新建一个CounterDown类继承counterDownTimer,然后在activity中使用,并将结果显示在textView上

public class MainActivity extends Activity {

    TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv=(TextView)findViewById(R.id.textView1);
        new Couterdown(30000,1000){
            @Override
            public void onTick(long millisUntilFinished) {
                tv.setText(toClock(millisUntilFinished));

            }
            @Override
            public String toClock(long millis) {
                return super.toClock(millis);
            }
        }.start();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

最终结果如图:

之前因为没解决8小时误差的问题,所以用的上面的方法,其实可以像下面这样做

ublic class MainActivity extends Activity {

    TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv=(TextView)findViewById(R.id.textView1);
        new CountDownTimer(70000,1000){
            @Override
            public void onTick(long millisUntilFinished) {
                SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");//初始化Formatter的转换格式。
                formatter.setTimeZone(TimeZone.getTimeZone("GMT+00:00"));
                String hms = formatter.format(millisUntilFinished);
                tv.setText(hms);

            }

            @Override
            public void onFinish() {
                // TODO Auto-generated method stub

            }

        }.start();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

不过最后都会有个小问题,就是最后一秒不会再减少,应该是counter类的参数问题,哪位大虾看到了给小弟说说解决的办法吧~~~

时间: 2024-10-10 00:29:11

使用CounterDownTimer实现时分秒倒计时的相关文章

js简单时分秒倒计时

最近做浏览器界面倒计时,用js就实现,两种方式: 一:设置时长,进行倒计时.比如考试时间等等 代码如下: 1 <html> 2 <head> 3 <meta charset="UTF-8"> 4 <title>简单时长倒计时</title> 5 <SCRIPT type="text/javascript"> 6 var maxtime = 60 * 60; //一个小时,按秒计算,自己调整! 7

毫秒数变成时分秒倒计时

js抽象代码: ;(function($){ /**时间间隔对象 * @author Karajan * @param gap 间隔毫秒 * @param {cT:当前时间(毫秒),eT:截止时间(毫秒),gap:间隔(毫秒),aEven:到点触发的事件function,iEven:初始化函数,初始化时被调用,lEven:倒计时结束触发方法} * */ function dateGap(gap){ var di=[],dCt=[1000*60*60*24,1000*60*60,1000*60,1

最简时分秒倒计时

代码:单页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible&qu

javascript 简单时分秒倒计时

<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .time_box { width: 200px; height: 50px; margin: 50px auto; } .time_box div { float: left; width: 3

PHP函数gmstrftime()将秒数转换成天时分秒

http://yangjunwei.com/a/930.html PHP函数gmstrftime()将秒数转换成天时分秒 一个应用场景需要用到倒计时的时分秒,比如新浪微博授权有效期剩余: 7天16小时47分钟42秒…… 在PHP环境下,PHP函数 gmstrftime() 可实现将秒数转换成时分秒的转换,先看例子: define("BJTIMESTAMP" , time()); //服务器当前时间 $expires_in = '1439577160';//到期时间 $expires =

java获取时分秒

java获取倒计时用的时分秒 long time = end - System.currentTimeMillis() / 1000; 单位是秒 int days=((int)time)/(3600*24); int hours=((int)time)%(3600*24)/3600; int minutes = ((int)time)%(3600*24)%3600/60; int seconds = ((int)time)%(3600*24)%3600%60%60;java获取时分秒

java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间

java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类). java.sql.Date是java.util.Date的子类,是一个包装了毫秒值的瘦包装器,允许 JDBC 将毫秒值标识为 SQL DATE 值.毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数. 为了与 SQL DATE 的定义一致,由 java.sql.Date 实例包装的毫秒值必须通过将时间.分钟.秒和毫

JS日历控件 灵活设置: 精确的时分秒.

在今年7月份时候 写了一篇关于 "JS日历控件" 的文章 , 当时只支持 年月日 的日历控件,现在优化如下: 1. 在原基础上 支持 yyyy-mm-dd 的年月日的控件. 2. 在原基础上增加支持 yyyy-mm-dd HH:MM 年月日时分的控件. 3. 在原基础上增加支持 yyyy-mm-dd HH:MM:SS 年月日时分秒的控件. 4. 增加确定按钮 及 今天 和关闭按钮.当我切换到其他年份的时候,我点击 "今天"按钮 就可以返回当前的年月份. 配置项如下:

C# 版本的 计时器类:精确到微秒 秒后保留一位小数 支持年月日时分秒带单位的输出

class TimeCount { // 临时变量,存放当前类能表示的最大年份值 private static ulong MaxYear = 0; /// <summary> /// 获取毫秒能表示的最大年份数 /// </summary> /// <returns>年份数最大值</returns> public static ulong GetMaxYearCount() { if (TimeCount.MaxYear != 0) return Time