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

Другие вопросы по тегам