用途:在 Jetpack Compose 测试中注入合成触摸事件,驱动节点完成点击、长按、双击、滑动、速度控制的 fling、捏合缩放及多点触控等手势。
主要能力:performTouchInput { … } 是合成触摸事件的唯一入口,在 TouchInjectionScope 中运行,坐标系为节点局部(原点在节点左上角),块内事件在返回时作为一批一次性刷新,期间不会重组。提供高层辅助方法:click、longClick、doubleClick、swipe、swipeUp/Down/Left/Right、swipeWithVelocity、pinch、multiTouchSwipe;低层事件:down、moveTo、moveBy、updatePointerTo/By、move、up、cancel、currentPosition。几何辅助包括 center、topLeft、bottomRight、width、height、percentOffset 等,pixels 为 0 起始,right == width - 1f、bottom == height - 1f。
使用方式:先选中带 testTag 的节点,再调用 performTouchInput;坐标务必用节点局部几何辅助,禁止硬编码屏幕像素。手势可拆到两个 performTouchInput 块,指针状态在同节点间保持,便于中途断言。手势后状态断言应放在 rule.runOnIdle { … };涉及时长时用 rule.mainClock.advanceTimeBy(...) 推进测试时钟,禁止 Thread.sleep。多指捏合需目标组件通过 Modifier.pointerInput(如 transformable、draggable2D 或 detectTransformGestures)接收指针输入。
限制:performGesture 已 @Deprecated,新代码不得使用,仅保留二进制兼容。简单点击应用 performClick();悬停、右键、滚轮应改用鼠标键盘注入;fling 动画需先暂停时钟。swipeWithVelocity 需时长足够容纳至少约 3 个输入事件(约 40ms 起),否则抛出 IllegalArgumentException。测试依赖 androidx.compose.ui:ui-test-junit4(或 ui-test),并通过 ./gradlew :app:connectedDebugAndroidTest 或 :app:testDebugUnitTest 验证。具体示例与内部源码行号见原始资料。