Controlling Playback
State machines play by “advancing” over time. This is done once per frame by the amount of time between frames. For example, for a graphic running at 60 frames per second, the state machine would be advanced by approximately 16.67 milliseconds (1/60th of a second) each frame. This advancing evaluates keyframes, transitions, data bindings changes, and ultimately the visible artboard elements to create the illusion of motion over time. This runtime provides a way to control whether the state machine is playing. When paused or stopped, the state machine does not advance and the last rendered frame remains visible. When playing from pause, the state machine resumes from where it left off, whereas when playing from stop, it restarts from the entry state. Whether or not a state machine plays automatically depends on the value of theautoplay property. This is true by default. It may be useful to set this to false if you want to configure the state machine and artboard, e.g. through data bindings, before initial playback.
In addition to the paused/stopped state, state machines may also “settle”. This is an optimization where the Rive runtime detects that no further changes will occur (for example, if there are no active transitions or animations). While settled the state machine will also stop advancing. This improves performance and energy use by avoiding unnecessary calculations. State machines are unsettled by external actions that change their state, such as user input or data binding changes. You can additionally force a state machine to unsettle by calling play, though it may immediately re-settle if there is no further work to be done.
Playing State Machines
- Compose
- Legacy
By default, the
Rive composable will select and create the default state machine specified in the Rive editor. To specify a different state machine, you must first create a StateMachine object from an Artboard.Compose
State machine objects can be created in Compose using therememberStateMachine function, which takes an artboard and name of the state machine.Outside of Compose
Alternatively, you can create a state machine outside of Compose contexts. Note that with this approach you are responsible for managing the state machine’s lifecycle and must eventually close it withStateMachine::close() when no longer needed, or leveraging its AutoClosable interface with a use block.Using the State Machine
Once you have a state machine, you can pass it to theRive composable via the stateMachine parameter.By default the Rive composable will play the selected state machine. To toggle the play/pause state, set the playing parameter, triggering a re-composition. This is also used to replicate the auto-play behavior of other runtimes - simply set playing to false if you need to perform initial setup and set to true once ready.