0
!! 기억할것 !!
기본 템플릿에서 멤버변수는 보라색
abs추상클래스, 인터페이스 는 내장된 멤버메소드를 반드시 사용해야만 한다.
Flag 변수란 특정 동작을 수행할지 말지 결정하는 (보통 1비트인) 변수 ( 보통 is어쩌고 로 시작)
클래스의 메소드 안에 메소드는 스택 영역에 생성되므로 재사용이 안된다.
setText()는 String 만 가능하기 때문에 "" + 숫자 한다 (가장쉽게 String 으로 변환하는 방법)
메인 코드 전체
package com.leopard4.timer;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView txtTimer;
TextView txtCount;
Button button;
int count = 0;
boolean isFinished = false;
CountDownTimer timer;
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtTimer = findViewById(R.id.txtTimer);
txtCount = findViewById(R.id.txtCount);
button = findViewById(R.id.button);
timer = new CountDownTimer(10000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
// 위에서 정한 인터벌이 될때마다 실행되는 함수
// 인터벌마다 무엇인가 실행하고 싶으면, 여기에 코드 작성.
// 위의 millisUntilFinished은 밀리 세컨즈 이므로, 초로 표시하려면
// millisUntilFinished을 1000으로 나눠줘야 한다.
long remain = millisUntilFinished / 1000;
Log.i("TimerApp Main", ""+ remain);
// 화면에 남은 시간을 보여준다.
txtTimer.setText("남은 시간: " + remain);
}
@Override
public void onFinish() {
// 타이머가 종료될때 실행되는 함수.
// 타이머가 종료되고 무엇인가 실행하고 싶으면, 여기에 코드 작성.
Log.i("TimerApp Main", "타이머 종료");
txtTimer.setText("시간 종료");
// 타이머가 종료되었음을 알려주는 변수
// 보통 is를 사용 (Flag 변수)
// 힙에있는 멤버변수는 보라색
isFinished = true;
showAlertDialog();
}
};
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 1. 타이머가 종료되었는지 확인!
if (isFinished == true) {
return;
}
count++;
txtCount.setText("Tap 카운트: " + count);
}
});
timer.start();
}
// 타이머가 종료되면, 알러트 다이얼로그 띄워서
// "다시 도전하시겠습니까?"
// 취소, 확인
// 취소를 누르면, 앱을 종료
private void showAlertDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("알림");
builder.setMessage("다시 도전하시겠습니까?");
// 확인 버튼을 누르면, 타이머를 다시 시작
builder.setPositiveButton("확인", (dialogInterface, i) -> {
// 타이머를 다시 시작
timer.start();
// 카운트를 0으로 초기화
count = 0;
txtCount.setText("Tap 카운트: " + count);
// 타이머가 종료되었음을 알려주는 변수를 false로 초기화
isFinished = false;
});
builder.setNegativeButton("취소", (dialogInterface,i) -> {
// 앱을 종료
finish();
});
builder.show();
}
}