Wednesday, May 22, 2024
HomeiOS DevelopmentGoogle I/O 2024: Shared Factor Transitions in Jetpack Compose

Google I/O 2024: Shared Factor Transitions in Jetpack Compose


Google I/O 2024 launched so many thrilling new applied sciences, particularly Gemini AI and Jetpack Compose. Although Jetpack Compose is superior and enhancing quickly to meet up with the legacy XML-based layouts (which have been on the market for ages), it fell quick in some areas, akin to animations.

Shared Factor Transitions are among the many hottest APIs from the Android Animation Framework, which wasn’t obtainable within the Jetpack Compose till now. That’s proper – Google launched shared ingredient transitions for Jetpack Compose at their 2024 I/O occasion!

This long-awaited characteristic helps you create stunning, fluid animations when navigating between screens in your app. Think about a consumer tapping a picture in an inventory, and it easily expands and animates into the detailed view. Shared ingredient transitions in Compose present a declarative option to obtain this impact, providing you with extra management over the animation course of than the normal View system. This empowers builders to design seamless consumer experiences that improve their apps’ total feel and appear.

Listed here are a few of the key capabilities of Shared Factor Transitions in Jetpack Compose launched at Google I/O 2024:

Getting Began

To make the most of the newest APIs, be sure to’re utilizing the newest Android Studio Jellyfish | 2023.3.1 and API Stage 34.

Click on the Obtain Supplies button on the high or backside of this tutorial. Unzip the ComposeTransitionAnimation.zip folder.

Now, launch Android Studio and open ComposeTransitionAnimation-Starter to import the starter undertaking. The ComposeTransitionAnimation-Starter undertaking accommodates the required boilerplates and Composables to leap straight into the animation!

ComposeTransitionAnimation-Starter resembles an e-commerce app with a fundamental Listing-Element format.

Construct and run the app – it’ll seem like this:

On this article, you’ll create a visible connection between parts on Listing and Element screens utilizing Shared Factor Transition.

First, add the newest model of Compose dependencies. Open construct.gradle in your app module and replace:

  • Declarative Animation: Shared ingredient transitions are outlined declaratively utilizing modifiers like Modifier.sharedElement and Modifier.sharedBoundsMatchingContentSize. This animation course of is way less complicated in comparison with the crucial strategy required within the View system.
  • Finer Management: Compose offers extra granular management over the animation in comparison with conventional strategies. You may outline the precise ingredient to animate, its transition bounds, and even the animation sort.
  • Seamless Integration with Navigation: Shared ingredient transitions work easily with Navigation Compose. When navigating between screens, you’ll be able to move the ingredient’s key as an argument, and Compose mechanically matches parts and creates the animation.

def composeVersion = "1.7.0-beta01"

Faucet Sync Now to obtain the dependencies.

Be aware: Shared ingredient assist is experimental and is in `beta`. The APIs could change sooner or later.

Overview of Key APIs

The most recent dependencies launched just a few high-level APIs that do the heavy lifting of sharing parts between Composable layouts:

  • SharedTransitionLayout: The highest-level format required to implement shared ingredient transitions. It offers a SharedTransitionScope. A Composable must be in SharedTransitionScope to make use of the modifiers of shared parts.
  • Modifier.sharedElement(): The modifier to flag one Composable to be matched with one other Composable throughout the SharedTransitionScope.
  • Modifier.sharedBounds(): The modifier that tells the SharedTransitionScope to make use of this Composable’s bounds because the container bounds for the place the transition ought to happen.

You’ll quickly create a hero-animation utilizing these APIs.

Implementing Shared Transition Animation

A Shared Transition Animation, or hero-animation, contains three main steps:

  1. Wrapping taking part views with SharedTransitionLayout.
  2. Defining SharedTransitionScope to the supply and vacation spot views.
  3. Transition with Shared Factor.

Including SharedTransitionLayout

Open the MainActivity class. It accommodates ListScreen and DetailScreen, which is able to share parts throughout a transition animation. As talked about earlier, you need to wrap them with SharedTransitionLayout to make them eligible for a Shared Transition Animation.

Replace the AnimatedContent block as follows:


SharedTransitionLayout {
  AnimatedContent(
    targetState = showDetails, 
    label = "shared_transition"
  ) { shouldShowDetails ->
    if (!shouldShowDetails) {
      ListScreen(
        // Current code
        ... ... ...
      )
    } else {
      DetailScreen(
        // Current code
        ... ... ...
       )
     }
  }
}

At this level, you may even see this warning from Android Studio for utilizing an experimental api:

To resolve this, add these imports on high of the MainActivity:


import androidx.compose.animation.ExperimentalSharedTransitionApi
import androidx.compose.animation.SharedTransitionLayout

Then add this annotation over the onCreate(savedInstanceState: Bundle?) methodology:


@OptIn(ExperimentalSharedTransitionApi::class)

Construct and run.

Defining SharedTransitionScope

Up subsequent, you have to outline SharedTransitionScope to the views taking part within the transition animation. The Composable must be inside SharedTransitionScope to make use of Modifier.sharedElement() for the animation. Therefore, you’ll have to move down SharedTransitionScope from SharedTransitionLayout in MainActivity to the supply and vacation spot Composable executing the animation.

On this case, you’ll transition from the smaller Picture Composable within the ListScreen (supply) to the bigger Composable in DetailScreen (vacation spot).

Begin with ListScreen.kt inside ui bundle. Replace the ListScreen operate with these parameters:


@Composable
enjoyable ListScreen(
  paddingValues: PaddingValues,
  gadgets: Listing<Merchandise>,
  onItemClicked: (Merchandise) -> Unit = {},
  sharedTransitionScope: SharedTransitionScope,
  animatedVisibilityScope: AnimatedVisibilityScope,
)

Then move the sharedTransitionScope and animatedVisibilityScope references for every ListItem:


gadgets.forEach { merchandise ->
  ListItem(
    merchandise = merchandise,
    onItemClicked = onItemClicked,
    sharedTransitionScope = sharedTransitionScope,
    animatedVisibilityScope = animatedVisibilityScope,
  )
}

Additionally, replace th eListItem Composable methodology signature accordingly:


@Composable
enjoyable ListItem(
  merchandise: Merchandise,
  onItemClicked: (Merchandise) -> Unit = {},
  sharedTransitionScope: SharedTransitionScope,
  animatedVisibilityScope: AnimatedVisibilityScope,
)

You’ll see the warning for utilizing an experimental api once more from the compiler, together with the errors for the lacking imports.

Fret not! Add these imports on high:


import androidx.compose.animation.AnimatedVisibilityScope
import androidx.compose.animation.ExperimentalSharedTransitionApi
import androidx.compose.animation.SharedTransitionScope

And the annotation for the ListScreen.kt file, above of the bundle title like this:


@file:OptIn(ExperimentalSharedTransitionApi::class)

bundle com.kodeco.android.composetransition.ui

That ensures you will have all the required imports and can mute warnings for utilizing experimental APIs for the scope of the ListScreen.kt file.

Be aware: Add the imports and annotation on DetailScreen.kt, too. You’ll want them shortly!

Your vacation spot Composable is the DetailScreen methodology. Now add animation scopes as methodology parameters as follows:


@Composable
enjoyable DetailScreen(
  merchandise: Merchandise, onBack: () -> Unit,
  sharedTransitionScope: SharedTransitionScope,
  animatedVisibilityScope: AnimatedVisibilityScope,
)

You’re able to wire up ListScreen and DetailScreen to carry out the transition animation.

Open MainActivity and replace SharedTransitionLayout block to move animatedVisibilityScope and sharedTransitionScope to its descendants:


SharedTransitionLayout {
  AnimatedContent(
    targetState = showDetails, 
    label = "shared_transition"
  ) { shouldShowDetails ->
    if (!shouldShowDetails) {
      ListScreen(
        paddingValues = paddingValues,
        gadgets = gadgets.worth,
        onItemClicked = { merchandise ->
          detailItem = merchandise
          showDetails = !showDetails
        },
        animatedVisibilityScope = this@AnimatedContent,
        sharedTransitionScope = this@SharedTransitionLayout,
      )
    } else {
      DetailScreen(
        merchandise = detailItem,
        onBack = { showDetails = !showDetails },
        animatedVisibilityScope = this@AnimatedContent,
        sharedTransitionScope = this@SharedTransitionLayout,
      )
    }
  }
}

Construct and run once more to make sure you resolved all compilation errors, however don’t anticipate the animation to occur but!



Supply hyperlink

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

- Advertisment -
Google search engine

Most Popular

Recent Comments