Довольно часто в играх надо выводить текущее время, или обратный отсчет.
В данном уроке приведу пример обратного отсчета стандартного табло времени.
Для начала в макете пропишем:
<TextView
android:id="@+id/taimer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="x"
android:textSize="18sp" />
Здесь мы будем выводить время
Далее в коде Java файла.
private int seconds = 0; // Секунды таймера
private int vremia_istecllo_miss_1 = 300; // Время отведенное на игру
private boolean running = true; // Секунды идут
TextView taimer;
private Handler handler = new Handler();
private Runnable runnable = new Runnable(){
@Override
public void run() { // Код таймера
/*
int hours = seconds / 3600;
int minutes = (seconds % 3600) / 60;
int secs = seconds % 60;
int sec = 20 - secs;
//*/
taimer = (TextView) findViewById(R.id.taimer);
int minute_s_1 = (((vremia_istecllo_miss_1 - seconds) % 3600) / 60);
int sec_s_1 = ((vremia_istecllo_miss_1 - seconds) % 60);
// Ниже строка форматного вывода таймера (выводим минуты и секунды)
// Если нужны часы добавьте их также
//(подсказка закомментированный код сверху)
String time_v_1 = String.format("%02d:%02d", minute_s_1, sec_s_1);
if((vremia_istecllo_miss_1 - seconds) >0) {
taimer.setText(time_v_1); // Выводим данные (время)
} else {// Время отведенное на игру истекло
// seconds = 0; // Зацикливаем
taimer.setText(""+0); // Я немного упростил (вывел просто ноль)
// running = false; // Можно остановить секунды
}
if (running) { // Таймер запущен
seconds++; // Секунды бегут
}
handler.postDelayed(this, 1000); // Скорость таймера
}
};
// И не забываем прописать
@Override
protected void onPause()
{
super.onPause();
/* Вы забыли написать строчку ниже и в вашем приложении появилась утечка памяти */
handler.removeCallbacks(runnable);
}
@Override
protected void onResume()
{
super.onResume();
handler.post(runnable); // Возобновление работы таймера
}
// Можно также прописать это, но в принципе это не обязательно
@Override
public void onDestroy() {
super.onDestroy();
//handler.removeCallbacksAndMessages(null);
if(handler != null){
handler.removeCallbacks(runnable);
}
}
Вроде я ничего не забыл
Подписывайтесь на канал, не пропустите новые публикации. Ставьте палец вверх. :-)