DEV Community

Cover image for Create Custom Jetpack Compose Animations 🎨 Make Your App Experience Truly Unique
Jimmy McBride
Jimmy McBride

Posted on • Updated on • Originally published at jimmymcbride.dev

Create Custom Jetpack Compose Animations 🎨 Make Your App Experience Truly Unique

Hey Kotlin enthusiasts! ✨ Ready to take your Jetpack Compose animations to the next level? In today's blog post, we'll learn how to create custom animations instead of using predefined ones, giving you the flexibility to design a unique experience for your app users. Let's dive in! 🏊

Custom Jetpack Compose Animations with Animatable 🎉

When you want to have more control over the animation and create a truly custom experience, using Animatable is the key. It provides you the flexibility to design unique and fine-tuned animation behavior.

Recall our previous example of scaling a button? Now, let's see how to create that same animation as a custom animation experience.

Custom Animation to Scale a Button 🖲️

In this example, we'll animate the scale of a button from 1f (normal size) to 1.5f (enlarged) when it's pressed. But this time, we'll make it custom! 🌟

@Composable
fun CustomScaleAnimationButton() {
    val animationProgress = remember { Animatable(1f) }

    val pressInteractionSource = remember { MutableInteractionSource() }
    val isPressed by pressInteractionSource.collectIsPressedAsState()

    LaunchedEffect(isPressed) {
        if (isPressed) {
            animationProgress.animateTo(
                targetValue = 1.5f, 
                animationSpec = spring(dampingRatio = Spring.DampingRatioLowBouncy)
            )
        } else {
            animationProgress.animateTo(
                targetValue = 1f, 
                animationSpec = spring(0.75f)
            )
        }
    }

    Button(
        onClick = {},
        modifier = Modifier
            .scale(animationProgress.value)
            .pointerInput(Unit) {
                detectTapGestures(
                    onPress = {
                        pressInteractionSource.tryEmit(PressInteraction.Press())
                        coroutineScope.launch {
                            tryAwaitRelease()
                            pressInteractionSource.tryEmit(PressInteraction.Release())
                        }
                    }
                )
            },
    ) {
        Text("Custom Animate Me!")
    }
}
Enter fullscreen mode Exit fullscreen mode

Voilà! You just crafted a custom animation in Jetpack Compose! 🏅 Your animation now has a unique behavior that sets it apart from the predefined ones.

Closing Thoughts 🤔

Creating custom animations with Jetpack Compose is a piece of cake! 🍰 By using Animatable, you can easily design custom, reusable, and flexible animations.

As always, I want to hear your thoughts on this topic. Please let me know in the comments section how you plan to use custom animations in your projects, and share your unique use cases in the comments!

Stay tuned for more amazing content on Kotlin, Android, Ktor, and Kotlin Multiplatform! 🎉

Before you go, don't forget to like the post 👍 and follow me 🔔 so you don't miss out on any exciting developments in the Kotlin world! Happy coding! 🥳

Top comments (0)