Compose 动画规格详解
在 Jetpack Compose 中,动画是构建流畅用户界面的关键。AnimationSpec 接口定义了动画的规格,包括数据类型转换和配置参数。本文将深入探讨 AnimationSpec 的核心实现及其应用场景。
AnimationSpec 接口概览
AnimationSpec 是一个泛型接口,用于存储动画规格。它包含要进行动画处理的数据类型,以及将数据转换为动画向量后使用的配置。
interface AnimationSpec<T> {
fun <V : AnimationVector> vectorize(
converter: TwoWayConverter<T, V>
): VectorizedAnimationSpec<V>
}
官方提供了多种实现,主要包括 spring、tween、snap、keyframes、repeatable 和 infiniteRepeatable。以下将逐一解析。
1. Spring 弹簧动画
spring 是许多 Compose 动画 API 的默认规格,如 animateAsState 和 updateTransition。它模拟物理弹簧效果。
核心参数
@Stable
fun <T> spring(
dampingRatio: Float = Spring.DampingRatioNoBouncy,
stiffness: Float = Spring.StiffnessMedium,
visibilityThreshold: T? = null
): SpringSpec<T>
- dampingRatio(阻尼比):控制回弹程度。值越小越有弹性,1.0 表示无回弹。
- stiffness(刚度):控制弹簧硬度。值越大恢复越快。
- visibilityThreshold:可见性阈值,用于优化性能。
常用常量
object Spring {
const val StiffnessHigh = 10_000f
const val StiffnessMedium =
StiffnessMediumLow =
StiffnessLow =
StiffnessVeryLow =
DampingRatioHighBouncy =
DampingRatioMediumBouncy =
DampingRatioLowBouncy =
DampingRatioNoBouncy =
}


