使用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類的參數問題,哪位大蝦看到了給小弟說說解決的辦法吧~~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM