728x90
반응형
회사에서 간단한 인증번호 타이머를 만들게 되어 작성하게 되었습니다.
코틀린에서는 timer라는 람다 함수를 제공하기 때문에 어렵지 않게 만들 수 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/sign_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".navigation.review.WriteReviewActivity"
android:background="@color/white">
<TextView
android:id="@+id/activity_sign_timer"
android:layout_width="110dp"
android:layout_height="50dp"
android:layout_marginStart="@dimen/app_margin_start"
android:layout_marginTop="20dp"
android:background="@drawable/all_round_stroke"
android:gravity="center"
android:padding="5dp"
android:text="03 : 00"
android:textColor="@color/black"
android:textSize="30sp"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/activity_sign_editText1" />
<Button
android:id="@+id/activity_sign_reAuth"
android:layout_width="60dp"
android:layout_height="30dp"
android:layout_marginStart="5dp"
app:layout_constraintLeft_toRightOf="@id/activity_sign_timer"
app:layout_constraintTop_toTopOf="@id/activity_sign_timer"
app:layout_constraintBottom_toBottomOf="@id/activity_sign_timer"
android:background="@drawable/all_round_stroke"
android:text="재인증" />
</androidx.constraintlayout.widget.ConstraintLayout>
xml 레이아웃은 다음과 같습니다.
타이머를 표시해줄 텍스트 뷰를 만들고 그 다음에 버튼을 한개 만듭니다.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:color="@color/gray"
android:width="1dp"/>
<corners android:radius="20dp" />
<solid android:color="@color/white"/>
</shape>
텍스트 뷰와 버튼의 배경이 될 xml 입니다.
import kotlin.concurrent.timer
import android.view.View
import android.widget.Toast
Class TimerActivity: AppCompatActivity(){
var second = 0
var minute = 0
var timeCheck = 0
override fun onCreate(saveInstanceState: Bundle?){
super.onCreate(saveInstanceState)
setTimer()
}
private fun setTimer() {
second = timeTick % 60
minute = timeTick / 60
timer(period = 1000, initialDelay = 1000) {
runOnUiThread {
activity_sign_timer.text = String.format("0$minute : %02d", second)
}
if (second == 0 && minute == 0) {
// 타이머 종료 로직
println("타이머 종료")
cancel()
runOnUiThread {
activity_sign_reAuth.visibility = View.VISIBLE
activity_sign_timer.text = String.format("00 : 00")
MyApp.shortToast(applicationContext, "인증 시간이 만료되었습니다.")
timeCheck = 1
activity_sign_reAuth.setOnClickListener {
activity_sign_reAuth.visibility = View.GONE
setTimer()
// requestTokenByPhone()
}
}
return@timer
}
if (second == 0) {
minute--
second = 60
}
second--
}
}
프로그래밍은 다음과 같습니다. timeTick을 초 단위로 기준 시간으로 잡고 timer의 값을 1000으로 잡아서 1초마다 실행 되도록 만들어줍니다. requestTokenByPhone()은 인증번호를 요청하기 위해 만든 함수이므로 무시해 줍시다.
제 게시글이 큰 도움이 되길 바랍니다!
댓글 및 공감은 블로거에게 큰 힘이 됩니다!!
728x90
반응형