관리자 모드에 진입할 떄 처럼 연속으로 클릭을 한 후 남은 횟수를 토스트로 띄워주고 일정 클릭횟수가 되면 다른 화면으로 전환 해주고 싶었다.
토스트를 연속으로 띄우면 처음에 뜬 토스트에 가려져 그다음 토스트가 느리게 떴다.
// 클릭 횟수를 카운트해서 특정 코드를 실행하는 Listener
abstract class OnClickCountListener(val mContext: Context) : View.OnClickListener {
companion object {
// 지정한 시간이내에 지정횟수만큼 클릭 시에만 카운트
const val CLICK_INTERVAL:Long = 1000L
const val CLICK_NUMBER = 5
}
private var lastClickedTime: Long = 0L // 새로 클릭한 시간
var count = 0 // 클릭 카운트
var mToast: Toast? = null
abstract fun onCountClick(view: View)
// CLICK_INTERVAL 시간 이내로 클릭했는 지
private fun isClickedTime() = System.currentTimeMillis() - lastClickedTime
override fun onClick(v: View) {
// CLICK_INTERVAL 시간 이내로 안누르면 카운트 초기화
if (isClickedTime() > CLICK_INTERVAL) {
count = 0
}
lastClickedTime = System.currentTimeMillis()
count += 1
if (count < CLICK_NUMBER) {
makeToast("진입 ${5-count} 단계 전입니다.")
}
if (count == CLICK_NUMBER) { // 5번 클릭 시에만 추상메소드 실행
makeToast("실행 ")
onCountClick(v)
count = 0 // 카운트 초기화
}
}
// 새로운 토스트가 띄워질 때 생성한 토스트 cancel 해준 뒤 재할당
private fun makeToast(message: String) {
mToast?.cancel()
mToast = Toast.makeText(mContext, message, Toast.LENGTH_SHORT)
mToast?.show()
}
}
CLICK_INTERVAL : 지정한 시간
CLICK_NUMBER : 지정한 쵯수
나는 1초 내에 5번을 클릭시에만 해보겠다.
isClickedTime() : 지정한 시간 이내로 클릭했는지 체크.
CLICK_NUMBER 번 만큼 클릭 시에 실행할 추상 메소드 onCountClick 를 정의해줌.
count 변수로 카운트를 해준 후 5번 클릭시에 onCountClick 를 실행하고 카운트를 초기화해준다.
btnToast.setOnClickListener(object : OnClickCountListener(mContext) {
override fun onCountClick(view: View) {
val intent = Intent(mContext, LoginActivity::class.java)
startActivity(intent)
}
})