Android

안드로이드 스튜디오 알람 app 개발

567Rabbit 2024. 6. 7. 10:21

 

화면 개발

 

 

 

 

로직을 짠다.

 

package com.yujinoh.alarm;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Button;
import android.widget.Toast;

import com.daimajia.androidanimations.library.Techniques;
import com.daimajia.androidanimations.library.YoYo;


public class MainActivity extends AppCompatActivity {

    // 멤버변수를 만든다.
    ImageView imgAlarm;
    TextView txtTime;
    TextView editTime;
    Button btnStart;
    Button btnCancel;
    CountDownTimer timer;
    int time;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imgAlarm = findViewById(R.id.imgAlarm);
        txtTime = findViewById(R.id.txtTime);
        editTime = findViewById(R.id.editTime);
        btnCancel = findViewById(R.id.btnCancel);
        btnStart = findViewById(R.id.btnStart);

        btnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (timer != null){ // 타이머 시작을 여러번 눌렀을 때 오류나지 않게 한다
                    return;
                }

                // 1. 유저가 입력한 시간을 가져온다
                String strTime = editTime.getText().toString().trim();

                // 1-1. 유저가 아무것도 입력 안했는지 검사
                if(strTime.isEmpty()){
                    Toast.makeText(MainActivity.this, "시간을 입력해주세요", Toast.LENGTH_SHORT).show();
                    return;
                }

                time = 0;
                try{
                    time = Integer.parseInt(strTime);
                } catch (Exception e){
                    Toast.makeText(MainActivity.this, "숫자를 입력하세요", Toast.LENGTH_SHORT).show();
                    return;
                }

                long countTime = time * (long)1000;   //1초에 1000밀리세컨즈 이다.


                // 2. 타이머를 만든다
                timer = new CountDownTimer(countTime, 1000) {  //1초씩 줄어든다.
                    @Override
                    public void onTick(long millisUntilFinished) {
                        // 1초씩 감소할때마다 하고싶은 일을 코딩.
                        // 화면에 표시하는 것을 여기서 한다.
                        long remain = millisUntilFinished / 1000;
                        txtTime.setText(remain + "초");
                    }

                    @Override
                    public void onFinish() {

                        // 소리나도록 한다.
                        MediaPlayer mp = MediaPlayer.create(MainActivity.this, R.raw.alarm);
                        mp.start();

                        // 흔들리도록 한다.
                        YoYo.with(Techniques.Shake).duration(400).repeat(4).playOn(imgAlarm);

                        timer = null; // 타이머 시작을 여러번 눌렀을 때 오류나지 않게 끝나면 null로 만들어준다

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

            }
        });

        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // 1. 타이머를 취소한다.
                if (timer != null){
                    timer.cancel();
                    timer = null;
                }

                // 2. 유저에게 표시하는 텍스트뷰의 초를 초기화한다.
                if (time == 0){
                    txtTime.setText("남은시간");
                } else {
                    txtTime.setText(time + "초");
                }

            }
        });

    }
}