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