JetPack Compose: добавление длительности клика

У меня есть составной компонент, например:

      Card(
    modifier = Modifier
        .fillMaxWidth()
        .then(modifier ?: Modifier),
    backgroundColor = colorResource(id = R.color.Red),
    shape = RoundedCornerShape(percent = 50),
) {
    Row (
        modifier = Modifier
            .size(160.dp)
    ) {
    }
}

Когда пользователь нажимает и удерживаетCardЯ хочу проверить, держал ли пользователь карту в течение секунды. Если они удерживают его дольше секунды, я хочу записать «CLICKED», но если они отпустят его до секунды, то не записывайте «CLICKED».

Как я могу этого добиться?

1 ответ

Вы можете использоватьInteractionSource.collectIsPressedAsStateчтобы узнать, нажата ли кнопка, и побочный эффект, чтобы узнать, когдаCardвыпущен.

Что-то вроде:

      val interactionSource = remember { MutableInteractionSource() }
val isPressed by interactionSource.collectIsPressedAsState()
var diffTime by remember { mutableStateOf(0L) }

if (isPressed){
    //Pressed
    val dateNow = Calendar.getInstance().timeInMillis
   
    DisposableEffect(Unit) {
        onDispose {
            //released
            val dateReleased = Calendar.getInstance().timeInMillis
            diffTime = dateReleased - dateNow
           
            //add your logic...
        }
    }
}

Card(
    onClick={},
    interactionSource = interactionSource,
){
    //..
}
Другие вопросы по тегам