I was trying to do a compass in jetpack compose. But I faced a problem with animating it.
I have a @Composable
that takes user phone rotation and rotate compass image in opposite direction. I use animateFloatAsState
like this:
val angle: Float by animateFloatAsState(
targetValue = -rotation, \\ rotation is retrieved as argument
animationSpec = tween(
durationMillis = UPDATE_FREQUENCY, \\ rotation is retrieved with this frequency
easing = LinearEasing
)
)
Image(
modifier = Modifier.rotate(angle),
// rest of the code for image
)
Everything looks fine but the problem occurs when rotation
is changed from 1
to 359
or in the opposite way. Animation doesn't rotate 2
degrees to the left but goes 358
degrees to the right which looks bad. Is there any way to make rotate animation that would use the shortest way?