gpt4 book ai didi

android - Jetpack Compose pointerInput detectTapGestures 设置onLongPress超时?

转载 作者:行者123 更新时间:2023-12-01 22:55:27 45 4
gpt4 key购买 nike

要在按钮或可组合项上实现长按功能,通常的方法是使用在修改器指针输入中检测到的点击手势

代码看起来非常简单并且有效。

Box(modifier = modifier.pointerInput(Unit) {

detectTapGestures(
onPress = {
//Do something
},
onDoubleTap = {

},
onLongPress = {
onLongClick()
},
onTap = {

}
)
}

但我需要的是在检测到长按事件之前以毫秒为单位修改超时(如果按下框的时间为 tomeoutMillisec,则触发长按事件)

pointerInput 范围具有包含 val“longPressTimeoutMillis”的“val viewConfiguration”(ViewConfiguration 是一个接口(interface))。但我无法重新分配这些值(不是 longPressTimeoutMillis,也不是重新分配类 viewConfiguration),因为它们是 val 而不是 var

Box(modifier = modifier.pointerInput(Unit) {

//this gives an error
this.viewConfiguration.longPressTimeoutMillis = 200L

detectTapGestures(
onPress = {

},
onDoubleTap = {

},
onLongPress = {
onLongClick()
},
onTap = {

}
)
},

有人知道怎么做吗?

最佳答案

这个问题是一个月前的,但如果其他人需要的话。您需要在 CompositionLocalProvider 中提供一个新的 ViewConfiguration,然后它将包装您的内容。

你可以把整个东西放在一个可组合的方法中,如下所示:

    @Composable
fun UpdateViewConfiguration(
longPressTimeoutMillis: Long? = null,
doubleTapTimeoutMillis: Long? = null,
doubleTapMinTimeMillis: Long? = null,
touchSlop: Float? = null,
content: @Composable () -> Unit
) {
fun ViewConfiguration.updateViewConfiguration() = object : ViewConfiguration {
override val longPressTimeoutMillis
get() = longPressTimeoutMillis ?: this@updateViewConfiguration.longPressTimeoutMillis

override val doubleTapTimeoutMillis
get() = doubleTapTimeoutMillis ?: this@updateViewConfiguration.doubleTapTimeoutMillis

override val doubleTapMinTimeMillis
get() =
doubleTapMinTimeMillis ?: this@updateViewConfiguration.doubleTapMinTimeMillis

override val touchSlop: Float
get() = touchSlop ?: this@updateViewConfiguration.touchSlop
}

CompositionLocalProvider(
LocalViewConfiguration provides LocalViewConfiguration.current.updateViewConfiguration()
) {
content()
}
}

然后修改

    UpdateViewConfiguration(
longPressTimeoutMillis = 200L
) {
[... Your content composable ...]
}

关于android - Jetpack Compose pointerInput detectTapGestures 设置onLongPress超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73338976/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com