Animatable.animateTo запускается каждый раз в Canvas Compose
Я использовал Animatable.animateTo для анимации, как показано ниже:
val percentageAnimate = remember { Animatable(0.001f) }
LaunchedEffect(Unit) {
percentageAnimate.animateTo(percentage)
}
с процентомAnimate.value я буду рисовать свою круговую диаграмму в Canvas Composable.
Мне нужна анимация только во время первой композиции.
Когда я использовал вышеупомянутый элемент в LazyVerticalGrid, анимация запускается каждый раз, когда элемент списка перерабатывается и добавляется.
1 ответ
Это потому, что вы установилиpercentageAnimate
как ключ, ключ изменяется (и его внутреннее состояние) при вызове.animateTo()
и это приводит к перезапуску сопрограммы вLaunchEffect
. Если вы хотите запустить анимацию только один раз, вам нужен постоянный ключ.
val percentageAnimate = remember { mutableStateOf(Animatable(0.001f)) }
LaunchedEffect(Unit) {
percentageAnimate.value.animateTo(percentage)
}
Затем используйте его на этапе рисованияpercentageAnimate.value