본문 바로가기
Android

[Android] 타이머 앱: Extract Resource, CountDownTimer

by eyoo 2022. 7. 12.

activity_nain.xml에서 위젯들의 id를 정할때 Extract Resource로 리소스 이름을 설정할수있다.

 

 

 

activity_nain.xml에서의 id 코드도 바뀌었다.

 

            android:text="@string/timer_text"

 

 

res의 values안의 string.xml에서 확인할수있다.

 

<resources>
    <string name="app_name">핑거 스피드 게임</string>
    <string name="timer_text">남은시간</string>
</resources>

# 하드코딩이라고 한다.

 

 

이제 CountDownTimer로 타이머를 기능을 만들어보자.

 

    TextView txtTimer;
    TextView txtCount;
    Button button;

    // 타이머를 사용하기위한 멤버변수로 선언
    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);

        timer = new CountDownTimer(60000, 1000) {
            @Override
            public void onTick(long l) {

            }

            @Override
            public void onFinish() {

            }
        }
    }

 

 

시간 (ms단위)를 상수처리할수있다. 

 

    final int millisInFuture = 60000;
    final int countDownInterval = 1000;

    @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(millisInFuture, countDownInterval) //...

 

 

전체 코드는 아래와 같이 구성했다.

 

    TextView txtTimer;
    TextView txtCount;
    Button button;
    Button btnAgain;

    // 타이머를 사용하기위한 멤버변수로 선언
    CountDownTimer timer;

    final int millisInFuture = 11000;
    final int countDownInterval = 1000;
    int count = 0;
    boolean isFinished = false;

    @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);
        btnAgain = findViewById(R.id.btnAgain);

        timer = new CountDownTimer(millisInFuture, countDownInterval) {
            @Override
            public void onTick(long l) {
                // 남은시간을 계산해서 텍스트뷰에 보여준다.
//                Log.i("MyTimer", "남은시간 : " + l);

                long remain = (int)l/1000;
                // int remain = (int) l / 1000;

                txtTimer.setText(""+remain);

                if(remain == 5){
                    txtTimer.setTextColor(Color.RED);
                }

            }

            @Override
            public void onFinish() {
                Log.i("MyTimer", "타이머 끝");
                txtTimer.setText("타이머가 끝났습니다.");
                txtTimer.setTextColor(Color.BLACK);
                isFinished = true;
                btnAgain.setVisibility(View.VISIBLE);


            }
        };

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (isFinished == false){
                    count = count +1;
                    txtCount.setText("Tap : "+count);
                }
            }
        });

        btnAgain.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                count = 0;
                txtCount.setText("Tap : "+count);
                txtTimer.setTextColor(Color.parseColor("#0017FF"));
                isFinished = false;
                timer.start();
                btnAgain.setVisibility(View.INVISIBLE);

            }
        });
        // 타이머를 시작해야 한다.
        timer.start();

 

 

앱이 잘 실행된다.

 

 

 

 

 

 

 

댓글