How do I get the MaterialSharedAxis transition as mentioned here in Java. You can see that the documentation is in Kotlin I couldn't find a Java documentation for these transitions. I took a look at the library via Android Studio and I could find such a class either. Please help
To use MaterialSharedAxis
you need at less version 1.2.0 of the Material library.
In your build.gradle
file:
implementation 'com.google.android.material:material:1.2.1'
Enable Activity transitions in your theme
<style name="MyTheme" parent="Theme.MaterialComponents.DayNight">
...
<item name="android:windowActivityTransitions">true</item>
</style>
Activity A:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Slide left
MaterialSharedAxis sharedAxisExit = new MaterialSharedAxis(MaterialSharedAxis.X,true);
// Slide right
MaterialSharedAxis sharedAxisEnter = new MaterialSharedAxis(MaterialSharedAxis.X,false);
// Exclude this views from the animation, or you get a flicker in animation.
sharedAxisEnter.excludeTarget(getWindow().getDecorView().findViewById(R.id.action_bar_container), true);
sharedAxisEnter.excludeTarget(android.R.id.statusBarBackground, true);
sharedAxisEnter.excludeTarget(android.R.id.navigationBarBackground, true);
sharedAxisExit.excludeTarget(getWindow().getDecorView().findViewById(R.id.action_bar_container), true);
sharedAxisExit.excludeTarget(android.R.id.statusBarBackground, true);
sharedAxisExit.excludeTarget(android.R.id.navigationBarBackground, true);
getWindow().setEnterTransition(sharedAxisEnter);
getWindow().setExitTransition(sharedAxisExit);
}
Activity B:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MaterialSharedAxis sharedAxisEnter = new MaterialSharedAxis(MaterialSharedAxis.X,true);
MaterialSharedAxis sharedAxisExit = new MaterialSharedAxis(MaterialSharedAxis.X,false);
sharedAxisEnter.excludeTarget(getWindow().getDecorView().findViewById(R.id.action_bar_container), true);
sharedAxisEnter.excludeTarget(android.R.id.statusBarBackground, true);
sharedAxisEnter.excludeTarget(android.R.id.navigationBarBackground, true);
sharedAxisExit.excludeTarget(getWindow().getDecorView().findViewById(R.id.action_bar_container), true);
sharedAxisExit.excludeTarget(android.R.id.statusBarBackground, true);
sharedAxisExit.excludeTarget(android.R.id.navigationBarBackground, true);
getWindow().setEnterTransition(sharedAxisEnter);
getWindow().setExitTransition(sharedAxisExit);
}
Trigger the animation:
Intent intent = new Intent(ActivityA.this, ActivityB.class);
ActivityOptions activityOptions = ActivityOptions.makeSceneTransitionAnimation(ActivityA.this);
startActivity(intent, activityOptions.toBundle());