public class KeyframesSpec<T>(public val config: KeyframesSpecConfig<T>) :
DurationBasedAnimationSpec<T>
KeyframesSpec creates a VectorizedKeyframesSpec animation.
VectorizedKeyframesSpec animates based on the values defined at different timestamps in the duration of the animation (i.e. different keyframes). Each keyframe can be defined using KeyframesSpecConfig.at. VectorizedKeyframesSpec allows very specific animation definitions with a precision to millisecond.
For each interval, you may provide a custom Easing by use of the KeyframesSpecConfig.using function.
By default, values are animated linearly from one interval to the next (similar to tween), however for 2-dimensional values you may animate them using arcs of quarter of an Ellipse with KeyframesSpecConfig.using and ArcMode:
If instead, you wish to have a smooth curvy animation across all intervals, consider using KeyframesWithSplineSpec.
Code Examples
FloatKeyframesBuilder
fun FloatKeyframesBuilder() {
KeyframesSpec(
KeyframesSpec.KeyframesSpecConfig<Float>().apply {
0f at 0 // ms // Optional
0.4f at 75 // ms
0.4f at 225 // ms
0f at 375 // ms // Optional
durationMillis = 375
}
)
}
KeyframesBuilderWithEasing
fun KeyframesBuilderWithEasing() {
// Use FastOutSlowInEasing for the interval from 0 to 50 ms, and LinearOutSlowInEasing for the
// time between 50 and 100ms
keyframes<Float> {
durationMillis = 100
0f at 0 using FastOutSlowInEasing
1.5f at 50 using LinearOutSlowInEasing
1f at 100
}
}
OffsetKeyframesWithArcsBuilder
fun OffsetKeyframesWithArcsBuilder() {
keyframes<Offset> {
// Animate for 1.2 seconds
durationMillis = 1200
// Animate to Offset(100f, 100f) at 50% of the animation using LinearEasing then, animate
// using ArcAbove for the rest of the animation
Offset(100f, 100f) atFraction 0.5f using LinearEasing using ArcAbove
}
}