study gomi

[Compose] 연속 클릭 동작 composable 본문

App/Android

[Compose] 연속 클릭 동작 composable

공부하곰 2024. 10. 14. 12:45
728x90
반응형

일반적으로 쓰는 OnClickCountListener 참고

https://velog.io/@soyoung-dev/%EC%9D%BC%EC%A0%95-%ED%9A%9F%EC%88%98-%ED%81%B4%EB%A6%AD-%EC%8B%9C-%EC%9D%B4%EB%B2%A4%ED%8A%B8-5%EB%B2%88-%EC%97%B0%EC%86%8D-%ED%84%B0%EC%B9%98

 

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

💌 [Android/Kotlin] 일정 횟수 클릭 시 이벤트 (5번 연속 터치) 안드로이드 설정에서 빌드번호를 연타하면 개발자 모드를 진입 하듯이, 나도 어떤 히든 부분을 몇초안에 일정 횟수를 연타 했을 때 관

velog.io

 

Compose에서 View가 없기 때문에 그대로 사용하기는 어렵다.

클릭 수를 추적할 수 있도록 remember와 LaunchedEffect를 사용해 Compose 환경에서 더 적합하게 변경해야 함.

 

1. ClickCount 5번 / 5번 연속 클릭 감지하는 composable

@Composable
fun rememberClickCount(
    onCountClick: () -> Unit,
    targetCount: Int = 5,
    intervalMillis: Long = 1000L
): (()-> Unit) {
    var clickCount by remember { mutableStateOf(0) }
    var lastClickedTime by remember { mutableStateOf(0L) }

    return {
        val currentTime = System.currentTimeMillis()

        if (currentTime - lastClickedTime < intervalMillis) {
            clickCount++
        } else {
            clickCount = 1
        }

        lastClickedTime = currentTime

        if (clickCount >= targetCount) {
            onCountClick()
            clickCount = 0
        }
    }
}

 

 

2. 사용 예시

@Composable
private fun MyCompose() {
    val onTextClick = rememberClickCount(
        onCountClick = { Timber.i("Text clicked 5 times!") } // 로그 출력
    )

    Text(
        text = "text 값 ..",
        modifier = Modifier.clickable {
            onTextClick()
        }
    )
}

- 일단은 로그를 출력하게끔 해뒀다.

728x90
반응형