You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Compose中pointerInput的key参数为何未重启手势检测?

问题原因分析

你的代码存在两个关键问题导致该现象出现:

1. 参数被内部状态遮蔽(无效参数)

在MainCompose中,你定义了同名的参数trigger和内部可变状态trigger:

@Composable
fun MainCompose(trigger: Int) {
    var trigger by remember { mutableStateOf(0) } // 这个变量完全遮蔽了外部传入的参数
    // ...
}

内部的trigger覆盖了外部参数,导致外部传入的参数根本不会被使用,属于无效定义。

2. pointerInput重启后需重新触发手势

根据官方文档描述,pointerInput(key)的代码块会在key变化时取消并重启:

将捕获的值指定为key参数,当值变化时会使代码块取消并从头重启

当你拖动时调用onDrag()修改trigger,MyPointInput的trigger参数变化,pointerInput协程被取消,原有detectTransformGestures的监听立即停止,打印也就中断了。

新的pointerInput协程启动后,detectTransformGestures会重新开始监听,但它只会响应新的手势操作——也就是说你需要松开手指,再次执行拖动动作,才会触发新的回调打印。如果在trigger变化时你没有松开手指,当前正在进行的拖动手势不会被新的协程捕获,自然无法再次启动打印。


内容的提问来源于stack exchange,提问作者evergreen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 19:13:27