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,
){
//..
}