跳到主要内容

状态机

状态机 定义了控制交互动画的逻辑。它们通过触发器、布尔值和数值等输入来切换动画状态。

播放状态机

Compose API

默认情况下,Rive 可组合项会选择并创建 Rive 编辑器中指定的默认状态机。要指定不同的状态机,需要先从 Artboard 创建 StateMachine 对象。

在 Compose 中

可以使用 rememberStateMachine 函数创建状态机对象,该函数接受画板和状态机名称。

val artboard = rememberArtboard(myRiveFile, "My Artboard")
val stateMachine = rememberStateMachine(artboard, "My State Machine")

在 Compose 外部

也可以在 Compose 上下文之外创建状态机。注意,使用此方式你需要自行管理状态机的生命周期,在不再需要时调用 StateMachine::close(),或利用其 AutoClosable 接口配合 use 块。

val artboard = Artboard.fromFile(myRiveFile, "My Artboard")
val stateMachine = StateMachine.fromArtboard(artboard, "My State Machine")
// ...
stateMachine.close()
artboard.close()

使用状态机

获得状态机后,可以通过 stateMachine 参数将其传递给 Rive 可组合项。

默认情况下,Rive 可组合项会播放选定的状态机。要切换播放/暂停状态,设置 playing 参数来触发重组。这也用于复制其他运行时的自动播放行为 —— 如果需要进行初始设置,将 playing 设置为 false,准备就绪后设置为 true

Rive(
myRiveFile,
artboard = artboard,
stateMachine = stateMachine,
playing = true // 或 false 暂停
)

Legacy View API

默认情况下,RiveAnimationView 会自动播放选定的状态机。

⚠️ 旧版 API 允许同时播放多个线性动画和状态机。由于复杂性和与其他运行时的差异,不推荐此做法。建议使用单一状态机通过状态和转换来控制所有动画。

使用 XML 布局

<app.rive.runtime.kotlin.RiveAnimationView
app:riveResource="@raw/my_rive_file"
app:riveStateMachine="My State Machine"
app:riveAutoPlay="true" />

使用 Kotlin

animationView.setRiveResource(
R.raw.my_rive_file,
stateMachineName = "My State Machine",
autoplay = true
)

控制播放

可以使用与线性动画播放相同的 API(即 playpausestop)来控制状态机的播放状态。调用时确保将 isStateMachine 参数设置为 true

animationView.play("My State Machine", isStateMachine = true)
animationView.pause("My State Machine", isStateMachine = true)
animationView.stop("My State Machine", isStateMachine = true)