TodayILearned/Android&Kotlin
AlldayFit 팀프로젝트
YJ_ILY
2023. 11. 1. 21:41
타이머 구현 기능을 맡아서 진행 중 start with click 쪽을 클릭하면 텍스트가 사라지고 스톱워치가 시작되는 기능을 구현하기로 했다.
코드에는 분명 에러가 없는데 에뮬레이터를 실행하고 버튼을 클릭하는데 스톱워치가 보이지 않았다.
한참을 고민하다가 그 이유를 알아냈는데 진짜 허탈했다.
이유는 start with click 텍스트를 감싸고 있는 circle image view가 white 배경으로 채워져있어서였다..ㅋㅋㅋㅋㅋㅋㅋ
우리는 타이머를 00:00:00 으로 보이게 시작하고 싶었는데 에뮬레이터를 실행했을땐 00:00 으로 보이는 스톱워치가 실행됐다.
구글링 결과!
아래와 같은 코드를 추가해주니 원하는대로 화면에 보이는 것을 확인할 수 있었다.
/시간을 00:00:00 으로 보이게 하는 코드
mBinding.timer.setOnChronometerTickListener {
val elapsedMillis = SystemClock.elapsedRealtime() - it.base
val hours = (elapsedMillis / 3600000).toInt()
val minutes = (elapsedMillis - hours * 3600000) / 60000
val seconds = (elapsedMillis - hours * 3600000 - minutes * 60000) / 1000
val formattedTime = String.format("%02d:%02d:%02d", hours, minutes, seconds)
it.text = formattedTime
}
}
스톱워치 진행 중 1 번 탭할 경우에는 스톱워치가 멈추고 2번 탭할 경우 스톱워치 화면에서 '오늘도 맛있다' 라는 문구로 전환시키는 코드를 구현해야 했다.
이 코드에서는 Chronometer를 클릭할 때마다 현재 시간과 마지막 클릭 시간을 비교하여 더블클릭 여부를 확인해야 한다.
// 멤버 변수로 정의
private var lastClickTime: Long = 0
// count 클릭 리스너에 코드 추가
val clickTime = System.currentTimeMillis()
if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA) {
// 더블클릭 시 화면에 TextView 표시
mBinding.finishTextView.visibility = View.VISIBLE
mBinding.timer.visibility = View.INVISIBLE
}
lastClickTime = clickTime
companion object {
private const val DOUBLE_CLICK_TIME_DELTA: Long = 300 // 더블클릭 간격
}