MainActivity.java
package com.bpdev.timer;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.CountDownTimer;
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 isFinish = false;
CountDownTimer timer;
@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);
// 타이머를 만든다. // 7000 : 7초 //
timer = new CountDownTimer(7000, 1000) {
@Override
public void onTick(long l) {
// 위의 인터벌 파라미터에 의해서 실행되는 함수다. // l에 시간이 담아져 온다.
// 남은 시간을 화면에 표시한다!!
long remain = l / 1000;
txtTimer.setText(remain+"초");
}
@Override
public void onFinish() {
// 타이머가 종료될 때 실행 되는 함수이므로,
// 종료될 때 하고 싶은 동작 코드를 여기에 작성.
isFinish = true;
showAlertDialog();
}
};
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(isFinish){
return;
}
txtCount.setText(count + "번");
count = count + 1;
}
});
// new로 공간은 만들었으니 동작을 만들자.
timer.start();
}
// 알러트 다이얼로그 띄워서, 다시 도전할 지, 종료할 지 보여줄 것.
private void showAlertDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); // 어디에 띄울 때 컨텍스트로 알려줘야 함. ()생성자
// 이 다이얼로그의 외곽부분을 눌렀을 대, 사라지지 않도록 하는 코드
builder.setCancelable(false);
builder.setTitle("타이머 종료");
builder.setMessage("다시 도전 하시겠습니까?");
builder.setPositiveButton("도전", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// 처음부터 다시 시작할 수 있도록 할 것이다.
// 남은 시간 초기값
// 누르는 수는 0
// 멤버변수와 로컬변수
count = 0;
isFinish = false;
txtCount.setText(count+"번");
timer.start();
}
});
builder.setNegativeButton("종료", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// 액티비티 종료!
finish();
}
});
builder.show();
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/txtTimer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="111dp"
android:layout_marginTop="91dp"
android:layout_marginEnd="111dp"
android:text="남은 시간"
android:textSize="34sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/txtCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="212dp"
android:text="탭한 갯수"
android:textSize="34sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="150dp"
android:layout_marginTop="100dp"
android:layout_marginEnd="150dp"
android:text="Tab!!"
android:textSize="34sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.617"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txtCount" />
</androidx.constraintlayout.widget.ConstraintLayout>