Timer + Handler 实现倒计时,非常简单的demo
如图:
下面是主要代码:
public class MainActivity extends Activity {
/**
* 用于显示时间
*/
private TextView tv_time;
/**
* 用于标记是否在倒计时
*/
private boolean isWorking;
/**
* 用于控制倒计时
*/
private Button bt_reset, bt_stop, bt_start;
/**
* 设置60秒倒计时
*/
private int mTime;
/**
* 用于倒计时的Timer
*/
private Timer mTimer;
/**
* 用于倒计时的Handler
*/
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0x123) {
mTime--;
updateTimeDisplay();
if (mTime == 0) {
mTimer.cancel();
isWorking = false;
mTimer = null;
}
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//设置倒计时时间(秒)
mTime = 60;
//初始化
isWorking = false;
//初始化控件
setViews();
//设置监听事件
setListeners();
}
/**
* 初始化控件
*/
private void setViews() {
tv_time = (TextView) findViewById(R.id.tv_time);
bt_reset = (Button) findViewById(R.id.bt_reset);
bt_stop = (Button) findViewById(R.id.bt_stop);
bt_start = (Button) findViewById(R.id.bt_start);
}
/**
* 设置监听事件
*/
private void setListeners() {
bt_reset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mTimer != null) {
mTimer.cancel();
isWorking = false;
mTimer = null;
}
mTime = 60;
updateTimeDisplay();
}
});
bt_stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mTimer != null) {
mTimer.cancel();
isWorking = false;
mTimer = null;
}
}
});
bt_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isWorking) return;
startCountDown();
}
});
}
/**
* 更新时间显示
*/
private void updateTimeDisplay() {
tv_time.setText(String.valueOf(mTime));
}
/**
* 开始倒计时
*/
private void startCountDown() {
if (mTimer != null) {
mTimer.cancel();
isWorking = false;
mTimer = null;
}
isWorking = true;
mTimer = new Timer();
mTimer.schedule(new TimerTask() {
@Override
public void run() {
mHandler.sendEmptyMessage(0x123);
}
}, 1000, 1000);
}
}