Compose Shared Element
Experiment with SharedElement transition in Jetpack Compose, inspired by Flutter Hero widget.
View on GitHubDocumentation
compose-shared-element
Note: This is not meant to be a maintained library.
Proof of concept exploration of how to implement SharedElement transition in Jetpack Compose.
Inspired by Flutter Hero widget.
Transition consists of following animations:
- Position
- Scale
- Crossfade (which makes it work on any kind of element, e.g.
Text)
UsersListScreen:![]() UserDetailScreen: ![]() |
Slowed down transition animation:![]() |
|---|
Usage
- Define
FROMandTOelements with shared tag
@Composable
fun ScreenA() {
// ...
SharedElement(tag = "tag", type = SharedElementType.FROM) {
Image(image, Modifier.preferredSize(48.dp))
}
// ...
}
@Composable
fun ScreenB() {
// ...
SharedElement(tag = "tag", type = SharedElementType.TO) {
Image(image, Modifier.preferredSize(200.dp))
}
// ...
}
- Make
SharedElementsRoota common parent ofScreenAandScreenB. It doesn't have to be their direct parent.
SharedElementsRoot {
// change between ScreenA and ScreenB
}
- Transition starts automatically when second
SharedElementis detected
Sample
See sample usage with UsersListScreen and UserDetailsScreen here.
Issues
Considering the experimental state of this library and state of Jetpack Compose itself there are some issues described here.
Related Questions
Similar Libraries
Animation Playground
Practical examples of animations created using the intuitive animation API's that Compose offers
Heart Switch
❤️ A heart-shaped toggle switch component for Jetpack Compose
Flippable
A Jetpack Compose library for animating a flip transition between the front and back of something, such as a card.
Bees And Bombs Compose
Implementing some cool animations using Jetpack Compose
Browse by Category




