【问题标题】:Jetpack Compose - get click position in custom layoutJetpack Compose - 在自定义布局中获取点击位置
【发布时间】:2021-12-11 15:49:16
【问题描述】:

我正在使用 Layout 可组合在 Jetpack Compose 中显示一天时间线的自定义布局。结果看起来像Google's Calenar,代码类似于那个很棒的教程中描述的代码:https://danielrampelt.com/blog/jetpack-compose-custom-schedule-layout-part-1/

我的问题是: 我如何在Layout 可组合中接收(x,y)点击位置。通过将clickable 修饰符添加到placeables,我可以轻松地接收对Layout 子级的点击。但是,我的问题是,我如何接收在子项之间的布局空间上进行的点击位置

(根据前面提到的示例,这将是日期时间线中约会之间的空间。在这种情况下,我需要点击的位置来获取用户点击的时间信息)

我尝试在整个Layout 可组合中添加.clickable 修饰符,但我没有收到onClick lambda 中布局内点击的(x, y) 位置(它的类型是() -> Unit

【问题讨论】:

  • 你不应该同时问两个问题,因为其他人很难找到它。您的问题也与日历无关。见How do I ask a good question。你可以把你的问题一分为二。第一个可以是:“如何获得可点击位置?”。第二个可以是“如何让父视图点击包含多个可点击的子视图?”,这实际上取决于您的布局,因此您需要提供一个 minimal reproducible example 您遇到问题。
  • 您可以将此问题编辑为其中一个,然后创建第二个。还有诸如“我将不胜感激任何形式的帮助,在此先感谢您”之类的短语。是多余的,不应使用,请参阅更多信息here
  • @PhilipDukhov 好的,问题已更新

标签: android kotlin android-jetpack-compose android-jetpack


【解决方案1】:

你可以使用detectTapGestures,它会返回偏移量:

Modifier.pointerInput(Unit) {
    detectTapGestures { offset ->

    }
}

如果您需要为此手势添加涟漪效果,请参阅this answer。在您的情况下,您可能需要一个 MutableInteractionSource 数组用于每个子视图和一个用于父视图。

您可以在 Compose documentation 中找到更多自定义手势。

【讨论】:

  • 事实证明这是正确的解决方案。当roundToPx用在正确的地方时(这很重要,detectTapGestures返回像素,因此我们需要将其与Dps进行比较时考虑到它-Dps需要转换为@987654331 @s 通过调用roundToPx()) 解决方案效果很好。
猜你喜欢
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2022-09-27
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多