Originated from mobnetic/compose-shared-element.
Shared elements transition implementation for compose with various customization options. Currently providing the following transition patterns:
- Standard shared elements transition
- Material container transform (which basically mimics the
MaterialContainerTransform
of MDC-Android library)
While this library is highly experimental, if you want to use it, snapshot versions are available at Sonatype OSSRH's snapshot repository. These are updated on every commit to main
.
To use it:
repositories {
// ...
maven("https://s01.oss.sonatype.org/content/repositories/snapshots") // build.gradle.kts
maven { url 'https://s01.oss.sonatype.org/content/repositories/snapshots' } // build.gradle
}
dependencies {
implementation("com.mxalbert.sharedelements:shared-elements:0.1.0-SNAPSHOT")
}
- Define elements with the same
key
and differentscreenKey
s usingSharedElement
orSharedMaterialContainer
composables. - Wrap different screens in a single
SharedElementRoot
.
Transition will start when elements with the same key are detected.
SharedElementsTransitionSpec
of the start element will be used.- Transition is only applied to the shared elements, so you have to define the transition for the rest yourself. See the demo for examples. If you want to prevent an element from showing in your self-defined transition, call
prepareTransition(key)
. - Elements are composed separately in an overlay during transition, so
remember
won't work as expected. If your element is stateful, define the state outside theSharedElement
orSharedMaterialContainer
composables. - If the element is root element (i.e. direct child of
SharedElementRoot
) and is full-screen (e.g. hasModifier.fillMaxSize()
), specifyingisFullscreen = true
on it can greatly improve performance and allows you to use stateful composables.