본문 바로가기
Android

Android Studio CountDownTimer, Flag, (ABS,Interface)특성, 메소드안의 메소드를 다른메소드에서 호출, Log.i, setText(""+int)

by leopard4 2023. 1. 27.

0

 

Log info(I)

!! 기억할것 !!

기본 템플릿에서 멤버변수는 보라색

내장메소드를 사용하지 않을시 빨간줄이 뜸

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();
    }

}