停止 Jetpack Compose pointInteropFilter 消耗输入事件

2023-11-24

我有一个垂直的Column有两个孩子:

  1. A Pager可组合(来自伴奏者),显示Text.
  2. A Canvas绘制两个圆弧和一个圆的可组合项。

它们的排序顺序与此处描述的顺序相同。我想要Text始终渲染在Canvas.


实施细节

The Canvas可组合的有一个Modifier.pointerInteropFilter处理MotionEvent.ACTION_DOWN and MotionEvent.ACTION_MOVE。如果事件不在弧的 10% 距离内,则忽略该事件,并且false回。

我的理解力正在恢复false表示该事件尚未被消耗,因此将被传递给Pager来处理——但事实并非如此。一旦Modifier.pointerInteropFilter已注册,则Pager从不接收输入事件,无论是否返回true or false.


Layout

为了简洁起见,下面是我当前实现的简化版本。我有一个Column这使得Pager首先,然后是Canvas.

Column(
    modifier = Modifier.fillMaxSize(),
    verticalArrangement = Arrangement.Center
) {
    // The Pager should always be rendered behind the Canvas. This is to
    // prevent the Text from rending on top when being dragged.
    HorizontalPager(
        state = rememberPagerState(pageCount = 8000, initialPage = 4000)
    ) { page ->
        Text(
            modifier = Modifier.fillMaxWidth(),
            text = "25:00",
            textAlign = TextAlign.Center,
            fontSize = 60.sp
        )
    }
}

var progress by remember { mutableStateOf(0.25f) }

ArcSeekBar(progress, false) { change ->
    progress = change
}

在这个例子中,我硬编码了pointerInteropFilter总是返回 false,假设它不会消耗/阻止事件,允许它传递到Pager.

@Composable
fun ArcSeekBar(progress: Float, interaction: Boolean, changed: (Float) -> Unit) {
    val sweepAngle = 270.0f

    var width: Int by remember { mutableStateOf(0) }
    var height: Int by remember { mutableStateOf(0) }

    Canvas(
        modifier = Modifier
            .fillMaxSize()
            .aspectRatio(1.0f)
            .onSizeChanged {
                width = it.width
                height = it.height
            }
            .pointerInteropFilter {
                // Reduced for brevity, but whatever the function returns
                // the Pager composable behind it will never receive input events.
                false
            },
    ) {
        // Omitted for brevity, draw two arcs and a circle
    }
}

作为参考,我的布局产生以下结果:

enter image description here


使用 Jetpack Compose 1.4.1 和 Horizo​​ntalPagerandroidx.compose.foundation.pager.HorizontalPager代替伴奏者,这不再是问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

停止 Jetpack Compose pointInteropFilter 消耗输入事件 的相关文章

随机推荐

  • JSX 元素类型没有任何构造或调用签名。打字稿

    In case compose使用时出现错误JSX element type Option does not have any construct or call signatures redux 版本 3 7 2 import as Re
  • 网站图标 - 最佳实践 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 更新的问题 2022 年创建网站图标时的最佳实践是什么 这是 2013 年提出的原始问题 我正在尝试了解网站图标 触摸图标以及现在的平铺图标所需的所有这些不同尺寸和格式 我读过这
  • 如何在 iOS 7 中恢复 UIButton 边框?

    我建立了一个旧项目Xcode 5 中的 iOS SDK 6 1 然而 当应用程序在运行 iOS 7 的 iPhone 上运行时 UIbutton 是无边框的 我已经检查过 xib是 构建 gt 项目部署目标 5 0 如何配置 Xcode 5
  • 如何从 Azure Blob 存储查看图像而不是下载图像?

    好的 我正在使用 Node js 和 Azure Blob 存储来处理一些文件上传 当一个人上传图像时 我想向他们显示图像的缩略图 上传效果很好 我将其存储在我的 blob 中 我使用了这个很好的链接 使用 Azure SDK for No
  • 未经许可的地理定位[重复]

    这个问题在这里已经有答案了 我注意到现代基于 html5 的地理定位总是询问用户 您想与此网站共享您的位置吗 这很好 但我知道还有其他途径可以尝试确定大致的地理位置 而无需请求此许可 如果我记得的话 这些服务使用 IP 数据库来尝试跟踪地理
  • 我可以将 socket.io 事件侦听器分离到不同的模块中吗?

    我正在处理超过 15 个不同的套接字事件 我想在与这些事件相关的模块中管理某些 socket io 事件 例如 我想让一个名为 login js 的文件处理login套接字事件 名为 register js 的文件处理注册套接字事件 索引
  • 根据 Django 管理中的父模型预填充内联

    我有两个模型 Event and Series 其中每个事件都属于一个系列 大多数时候 一个事件start time与其系列相同default time 这是模型的精简版本 models py class Series models Mod
  • 有哪些好的 WCF/Web 服务安全读物? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 最近 我做了很多与 WCF Web 服务和分布式计算相关的学习和工作 但大多数安全概念都超出了我的理解范围 传输安全 消息安全 加密 证书等 我了解
  • Arraylists 的 Arraylist 的通用类型

    在正常的数组列表初始化中 我们过去定义泛型类型如下 List
  • 使用 Laravel 从 Web 服务器流式传输 Amazon S3 对象

    在我使用 laravel 5 1 构建的 Web 应用程序中 用户可以上传我存储在 Amazon S3 中的一些敏感文件 后来我想要用户经许可下载此文件 由于我希望进行此身份验证检查 因此我无法使用传统方法通过直接链接到 S3 中的文件来下
  • jQuery 从文本区域转义 HTML

    我想将 HTML 标签转义为实体名称 从textarea并将结果放入第二个textarea这样
  • 如何设置 selenium 3.0,在 c# 中出现错误“The geckodriver.exe 文件不存在...”

    将 Visual Studio 中的 selenium 更新为 3 0 将 Firefox 更新为 47 0 现在当我尝试使用本地 Webdriver 模式时收到此错误 当前目录或 PATH 环境变量上的目录中不存在 geckodriver
  • 使用同一 Visual Studio 2005 解决方案的不同版本/分支

    这是使用 VS2005 的可用性问题 我有从版本控制中签出的同一个 Visual Studio 2005 解决方案的不同分支 解决方案和项目文件也受到版本控制 在我的开发工作站上 有时我会在不同版本或分支上打开多个 Visual Studi
  • 打破嵌套循环和主循环[重复]

    这个问题在这里已经有答案了 我有以下代码 int x 100 Or some other value while x gt 0 for int i 5 i gt 0 i x x 2 if x 0 break 然而 这只会破坏 for 循环
  • Windows 的 Curses 替代方案 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 python 有没有可以在 Windows 中使用curses 模块的替代方案 我查了一下 python 文档 但其中提到它可以在 unix 中使用
  • ExecutorService 的 shutdown() 不会等到所有线程都完成

    我有一个代码 其中 4 个线程同时运行 我想等到这 4 个线程全部完成 只有在那之后才能继续应用程序流程 我尝试了两种方法 Thread join 此方法按预期工作 后面的代码join 仅在所有线程完成后才执行 ExecutorServic
  • Laravel htaccess 问题

    我正在尝试建立一个网站 该网站在实时开发服务器上运行得非常好 我们一直用该服务器向客户端展示该网站 这是来自实时开发的 htaccess 工作正常
  • 覆盖 Android 上的物理菜单按钮

    我希望 Android 设备上的菜单键打开一个对话框 而不是在我的应用程序运行时打开菜单 我尝试将其编码为onCreateOptionsMenu Menu menu 但它只在我第一次按下菜单按钮时起作用 我可以用其他方式来做吗 您可以通过在
  • 如何使用 Ncurses 打印 (☞゚ヮ゚)☞?

    我想在 Ubuntu 中使用 C 使用 Ncurses 库打印 首先 您只需拥有以下内容即可做到这一点 std cout lt lt lt lt std endl 而且效果很好 但是 当使用 Ncurses 打印时 我认为您需要使用prin
  • 停止 Jetpack Compose pointInteropFilter 消耗输入事件

    我有一个垂直的Column有两个孩子 A Pager可组合 来自伴奏者 显示Text A Canvas绘制两个圆弧和一个圆的可组合项 它们的排序顺序与此处描述的顺序相同 我想要Text始终渲染在Canvas 实施细节 The Canvas可