[Android/Kotlin] 일정 횟수 클릭 시 이벤트 (5번 연속 터치)

SoyoungLee·2023년 1월 4일
0

안드로이드/코틀린

목록 보기
51/70
post-thumbnail

💌 [Android/Kotlin] 일정 횟수 클릭 시 이벤트 (5번 연속 터치)

안드로이드 설정에서 빌드번호를 연타하면 개발자 모드를 진입 하듯이, 나도 어떤 히든 부분을 몇초안에 일정 횟수를 연타 했을 때 관리자 모드로 진입하게 하고 싶었다.

나는 1초 안에 5번을 클릭하면 설정모드로 진입하게 구현하려 한다.

💙 abstract class

클릭 횟수를 카운트해서 특정 코드를 실행하는 View.OnClickListener 추상클래스 파일을 생성해주었다.

abstract class OnClickCountListener : View.OnClickListener {

    companion object {
        // 지정한 시간이내에 지정횟수만큼 클릭 시에만 카운트
        const val CLICK_INTERVAL:Long = 1000L
        const val CLICK_NUMBER = 5
    }
    
}

💙 abstract fun

1초안에 5번을 클릭 했을 떄 실행할 추상메소드를 선언해준다.

    private var lastClickedTime: Long = 0L // 새로 클릭한 시간
    var count = 0 // 클릭 카운트

    abstract fun onCountClick(view: View)
    

💙 override fun onClick

5번을 1초 안에 클릭시에만 실행할 추상메소드도 선언해준다.
뷰를 클릭 시 isClickedTime() 로 CLICK_INTERVAL 시간 이내로 클릭했을 때만 카운트를 올려준다.
1초가 지난 후 클릭 시에는 카운트를 0으로 초기화 해줌.

    // 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) { // 5번 클릭 시에만 추상메소드 실행
            onCountClick(v)
            count = 0   // 카운트 초기화
        }


    }

💙 setOnClickListener

이제 적용할 뷰에 클릭 리스너를 달아준다.

imageView.setOnClickListener(object : OnClickCountListener() {
	override fun onCountClick(view: View) {

	Utils.Toast(mContext,"관리자모드 실행")
	val intent = Intent(mContext, SettingActivity::class.java)
	startActivity(intent)

	}
})

맞게 동작하는지 코드 중간중간 로그를 찍어보면 isClickedTime 이 CLICK_INTERVAL 을 넘어가면 카운트가 초기화 되는 걸 확인할 수 있다.

    // CLICK_INTERVAL 시간 이내로 클릭했는 지
    private fun isClickedTime() = System.currentTimeMillis() - lastClickedTime
    
    override fun onClick(v: View) {

        Log.d(TAG,"count 1 => $count")
        // CLICK_INTERVAL 시간 이내로 안누르면 카운트 초기화
        if (isClickedTime() > CLICK_INTERVAL) {
            count = 0
        }
        Log.d(TAG,"count 2 => $count")
        Log.d(TAG,"isClickedTime => ${isClickedTime()}")
        
        lastClickedTime = System.currentTimeMillis()
        Log.d(TAG,"lastClickedTime => $lastClickedTime")
        count += 1
        Log.d(TAG,"count 3 => $count")

        if (count == CLICK_NUMBER) { // 5번 클릭 시에만 추상메소드 실행
            onCountClick(v)
            count = 0   // 카운트 초기화
        }

    }

참고 : https://bumjae.tistory.com/30

profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻

0개의 댓글