상세 컨텐츠

본문 제목

[안드로이드 코틀린] CountDownTimer 타이머 쉽게 만드는 방법 part2 기능 구현

안드로이드

by aries574 2022. 10. 5. 13:51

본문


이번 시간에는 타이머 기능 구현을 만들어 보겠습니다.

이전 포스팅은 아래 링크를 들어가시면 됩니다.

2022.10.04 - [안드로이드] - [안드로이드 코틀린] CountDownTimer 타이머 쉽게 만드는 방법 part1 뷰 바인딩 및 화면 구성

 

[안드로이드 코틀린] CountDownTimer 타이머 쉽게 만드는 방법 part1 뷰 바인딩 및 화면 구성

이번 시간에는 뷰 바인딩 설정과 타이머 화면 구성을 만들어 보겠습니다.  목차 1. 실행 화면 2. 뷰 바인딩 3. 메인 화면 activity_main.xml 1. 실행 화면  1-1 설정 화면 1-2 타이머 화면 2. 뷰바..

aries574.tistory.com


목차

1. 실행 화면
2. 메인 코드 MainActivity.kt


1. 실행 화면

 


2. 메인 코드 MainActivity.kt

- 설명 -

 1. viewMode("start")

   - 인자 값에 따른 화면 설정 함수

   - start면 타이머 모드 cancel이면 설정 모드

 2. startStop()

   - 실행/정지 상태에 따른 기능 함수

   - 실행 중이면 정지, 정지면 실행 함수 호출

 3. stopTimer()

   - 타이머 정지 함수

   - 타이머 취소, 타이머 상태 값 변경, 정지 버튼 텍스트 변경

 4. updateTime()

   - 1초마다 타이머 변경하는 함수

class MainActivity : AppCompatActivity() {

    lateinit var binding: ActivityMainBinding

    lateinit var countDownTimer: CountDownTimer

    var timerRunning = false //타이머 실행 상태
    var firstState = false //타이머 실행 처음인지 아닌지

    var time = 0L //타이머 시간
    var tempTime = 0L //타이머 임시 시간

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        //시작 버튼
        binding.startBtn.setOnClickListener {

            viewMode("start")
            startStop()
        }

        //정지 버튼
        binding.stopBtn.setOnClickListener {
            startStop()
        }

        //취소 버튼
        binding.cancelBtn.setOnClickListener {
            viewMode("cancel")
            stopTimer()
        }
    }//onCreate

    private fun viewMode(mode: String){
        //상태: 처음
        firstState = true

        if(mode == "start"){ //타이머 모드
            binding.settingLayout.visibility = View.GONE //사라짐
            binding.timerLayout.visibility = View.VISIBLE//보여짐
        }
        else{ //설정 모드
            binding.settingLayout.visibility = View.VISIBLE //사라짐
            binding.timerLayout.visibility = View.GONE//보여짐
        }
    }

    /**
     * 타이머 실행 상태에 따른 시작&정지
     */
    private fun startStop(){
        if(timerRunning){ // 실행중이면 정지
            stopTimer()
        }else{ //정지면 실행
            startTimer()
        }
    }

    /**
     * 타이머 실행
     */
    private fun startTimer(){

        //처음 실행이면 입력값을 타이머 설정값으로 사용
        if(firstState){
            val sHour = binding.hourEdit.text.toString()
            val sMin = binding.minEdit.text.toString()
            val sSec = binding.secEdit.text.toString()

            time = (sHour.toLong() * 3600000) + (sMin.toLong() * 60000) +
                    (sSec.toLong() * 1000) + 1000
        }else{ //정지 후 이어서 시작이면 기존값 사용
            time = tempTime
        }

        //타이머 실행
        countDownTimer = object: CountDownTimer(time, 1000){
            override fun onTick(millisUnitFinished: Long) {
                tempTime = millisUnitFinished
                //타이머 업데이트
                updateTime()
            }
            override fun onFinish() {}
        }.start()

        //정지 버튼 텍스트
        binding.stopBtn.text = "일시 정지"
        //타이머 상태: 실행
        timerRunning = true
        //처음 아님
        firstState = false
    }

    /**
     * 타이머 정지
     */
    private fun stopTimer(){
        //타이머 취소
        countDownTimer.cancel()

        //타이머 상태: 정지
        timerRunning = false

        //정지버튼 텍스트
        binding.stopBtn.text = "계속"
    }

    /**
     * 타이머 업데이트
     */
    private fun updateTime(){
        val hour = tempTime / 3600000
        val min = tempTime % 3600000 / 60000
        val sec = tempTime % 3600000 % 60000 / 1000

        //시간 추가
        var timeLeftText = "$hour :"

        //분이 10보다 작으면 0 붙이기
        if(min < 10) timeLeftText += "0"

        //분 추가
        timeLeftText += "$min :"

        //초가 10보다 작으면 0 붙이기
        if(sec < 10) timeLeftText += "0"

        //초 추가
        timeLeftText += sec

        //타이머 텍스트 보여주기
        binding.timerText.text = timeLeftText
    }
}

2022.10.03 - [안드로이드] - [안드로이드 코틀린] 스톱워치 StopWatch 쉽게 만드는 방법

 

[안드로이드 코틀린] 스톱워치 StopWatch 쉽게 만드는 방법

이번 시간에는 스톱워치(StopWatch) 만드는 방법에 대하여 알아보겠습니다. 안드로이드에서는 Chronometer을 통해 스톱워치를 쉽게 만들 수 있습니다. 목차 1. 실행 화면 2. 메인 화면 activity_main.xml

aries574.tistory.com

2022.09.30 - [안드로이드] - [안드로이드 코틀린] HTTP Glide 이미지 쉽게 보여주는 방법

 

[안드로이드 코틀린] HTTP Glide 이미지 쉽게 보여주는 방법

이번 시간에는 Glide 라이브러리를 이용해서 이미지 쉽게 보여주는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 권한 등록 3. 라이브러리 등록 4. 메인 화면 activity_main.xml 5. 메인 코드 Main

aries574.tistory.com

2022.09.26 - [안드로이드] - [안드로이드 코틀린] Ringtone 효과음 내는 방법

 

[안드로이드 코틀린] Ringtone 효과음 내는 방법

이번 시간에는 소리로 알림을 알려주는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. 메인 화면 activity_main.xml 3. 메인 코드 MainActivity.kt 1. 실행 화면 2. 메인 화면 activity_main..

aries574.tistory.com

 

반응형

관련글 더보기

댓글 영역