Класс Animatable
Класс Animatable из Compose Animation
оборачивает тип T с AnimationVector,
например Animatable(0f) для Float.
Методы
animateTo
и
snapTo
помечены suspend, их вызывают из
LaunchedEffect
или другой корутины.
stop
останавливает текущую анимацию без suspend.
Синтаксис
val offset = remember { Animatable(0f) }
Методы
| Метод | Описание |
|---|---|
animateTo |
Suspend анимация к target с animationSpec. |
snapTo |
Suspend мгновенная установка value без анимации. |
stop |
Прерывает текущую анимацию на месте. |
Пример
Давайте сдвинем текст через animateTo:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.animation.core.Animatable
import androidx.compose.animation.core.tween
import androidx.compose.foundation.layout.offset
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.IntOffset
import kotlin.math.roundToInt
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val offset = remember { Animatable(0f) }
LaunchedEffect(Unit) {
offset.animateTo(100f, tween(800))
}
Button(onClick = { offset.stop() }) {
Text(
text = "abcde",
modifier = Modifier.offset {
IntOffset(offset.value.roundToInt(), 0)
},
)
}
}
}
}
На экране текст на кнопке за восемь сотен миллисекунд съезжает вправо, stop прерывает движение.
Смотрите также
-
метод
animateTo,
который плавно ведёт value к цели -
функция
LaunchedEffect,
откуда вызывают suspend методы Animatable -
функция
animateFloatAsState,
упрощённый вариант для Float в composable -
функция
tween,
которую передают в animateTo