为了实现倒计时的效果,便用到了CountDownTimer类,代码如下:
1.通过匿名类的方式实现如下(例如倒计时30秒,按1秒更新一次数值,代码里的单位是毫秒):
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);//1000毫秒触发一次onTick()
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
2.实际使用中发现通过匿名类实现虽然方便,但是不好控制,比如暂停,所以我们也可以通过内部类的方式实现,当然匿名类也是内部类的一种特殊形式:
class MyCount extends CountDownTimer
{
public MyCount(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 millisUntilFinished) {
// TODO Auto-generated method stub
//按设定时间触发
}
}
使用时:
MyCount mc = new MyCount(30000, 1000); //倒计时30秒,1秒触发一次onTick()事件
mc.start();//开始倒计时
暂停时:
mc.cancel();