Хочу написать обычный таймер. Искал в нете как это сделать, но там так много разных вариантов. Кто-то делает через класс CountDownTimer, кто-то советовал мне делать через класс Timer, видел даже реализацию где автор сделал таймер используя много if, switch и инкременты и декременты.
Мне как новичку очень сложно определиться, какой выбрать подход. Но вот в классе CountDownTimer я не нашел как ставить на паузу.
Вот я нашел парочку уроков:
http://androidsolution4u.blogspot.ru/20 ... timer.html
http://rusdelphi.com/help/krasivyj-tajmer-dlya-android/
Но из-за нехватки знаний я понимаю только половину кода.
Пожалуйста, опытные кодеры, подскажите на сегодняшний день какой способ создания таймера будет более простым и правильным? Очень не хватает совета, а желательно еще и элементарный код показать, с пояснением. Это было бы вообще супер и буду вам за это благодарен!
Более конкретно, мне не понятна часть кода после else:
@Override
public void onClick(View v) {
if(isRunning){
//cancel (pause) timer when it is running
mTimer.cancel();
mTimer=null;
isRunning=false;
btn_start.setText("Resume");
}else{
if (remainMilli == 0) {
//start timer from initial time
mTimer = new MyTimer(5 * 1000 *60, 1000);
} else {
//resume timer from where it is paused
mTimer = new MyTimer(remainMilli, 1000);
}
btn_start.setText("Pause");
mTimer.start();
isRunning=true;
}
не совсем понял условие if (remainMilli == 0) {
Что значит эта строка mTimer = new MyTimer(5 * 1000 *60, 1000);
Вот код целиком:
Код: Выделить всё
package com.ketan.countdowntimer;
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class TimerActivity extends Activity {
Button btn_start;
TextView txt_remaintime;
MyTimer mTimer;
long remainMilli = 0;
boolean isRunning=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timer);
btn_start = (Button) findViewById(R.id.btn);
txt_remaintime = (TextView) findViewById(R.id.text);
btn_start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(isRunning){
//cancel (pause) timer when it is running
mTimer.cancel();
mTimer=null;
isRunning=false;
btn_start.setText("Resume");
}else{
if (remainMilli == 0) {
//start timer from initial time
mTimer = new MyTimer(5 * 1000 *60, 1000);
} else {
//resume timer from where it is paused
mTimer = new MyTimer(remainMilli, 1000);
}
btn_start.setText("Pause");
mTimer.start();
isRunning=true;
}
}
});
}
class MyTimer extends CountDownTimer {
//constructor for timer class
public MyTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
// this method called when timer is finished
@Override
public void onFinish() {
// reset all variables
txt_remaintime.setText("Opps!! Time Up..");
btn_start.setText("Start");
isRunning=false;
remainMilli=0;
}
//this method is called for every iteration of time interval
@Override
public void onTick(long millisUntilFinished) {
remainMilli = millisUntilFinished;
//calculate minutes and seconds from milliseconds
String minute=""+(millisUntilFinished/1000)/60;
String second=""+(millisUntilFinished/1000)%60;
//apply style to minute and second
if((millisUntilFinished/1000)/60<10)
minute="0"+(millisUntilFinished/1000)/60;
if((millisUntilFinished/1000)%60<10)
second="0"+(millisUntilFinished/1000)%60;
// update textview with remaining time
txt_remaintime.setText(minute+":"+second);
}
}
}