Skip to content

Commit eca9bec

Browse files
Merge pull request #76 from MihaiCristianCondrea/codex/add-navcontroller-transitions-with-spring-effects
Add spring-based navigation transitions
2 parents c88a00d + 5dabe47 commit eca9bec

File tree

7 files changed

+80
-0
lines changed

7 files changed

+80
-0
lines changed

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import androidx.lifecycle.ViewModelProvider;
2525
import androidx.navigation.NavController;
2626
import androidx.navigation.NavGraph;
27+
import androidx.navigation.NavOptions;
2728
import androidx.navigation.fragment.NavHostFragment;
2829
import androidx.navigation.ui.AppBarConfiguration;
2930
import androidx.navigation.ui.NavigationUI;
@@ -217,10 +218,25 @@ private void observeViewModel() {
217218
navGraph.setStartDestination(uiState.getDefaultNavDestination());
218219
navController.setGraph(navGraph);
219220

221+
NavOptions springNavOptions = new NavOptions.Builder()
222+
.setEnterAnim(R.anim.fragment_spring_enter)
223+
.setExitAnim(R.anim.fragment_spring_exit)
224+
.setPopEnterAnim(R.anim.fragment_spring_pop_enter)
225+
.setPopExitAnim(R.anim.fragment_spring_pop_exit)
226+
.build();
227+
220228
if (mBinding.navView instanceof BottomNavigationView bottomNav) {
221229
NavigationUI.setupWithNavController(bottomNav, navController);
230+
bottomNav.setOnItemSelectedListener(item -> {
231+
navController.navigate(item.getItemId(), null, springNavOptions);
232+
return true;
233+
});
222234
} else if (mBinding.navView instanceof NavigationRailView railView) {
223235
NavigationUI.setupWithNavController(railView, navController);
236+
railView.setOnItemSelectedListener(item -> {
237+
navController.navigate(item.getItemId(), null, springNavOptions);
238+
return true;
239+
});
224240
}
225241

226242
setSupportActionBar(mBinding.toolbar);
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<set xmlns:android="http://schemas.android.com/apk/res/android">
3+
<translate
4+
android:fromXDelta="100%"
5+
android:toXDelta="0%"
6+
android:duration="300"
7+
android:interpolator="@interpolator/fragment_spring" />
8+
<alpha
9+
android:fromAlpha="0"
10+
android:toAlpha="1"
11+
android:duration="300"
12+
android:interpolator="@interpolator/fragment_spring" />
13+
</set>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<set xmlns:android="http://schemas.android.com/apk/res/android">
3+
<translate
4+
android:fromXDelta="0%"
5+
android:toXDelta="-100%"
6+
android:duration="300"
7+
android:interpolator="@interpolator/fragment_spring" />
8+
<alpha
9+
android:fromAlpha="1"
10+
android:toAlpha="0"
11+
android:duration="300"
12+
android:interpolator="@interpolator/fragment_spring" />
13+
</set>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<set xmlns:android="http://schemas.android.com/apk/res/android">
3+
<translate
4+
android:fromXDelta="-100%"
5+
android:toXDelta="0%"
6+
android:duration="300"
7+
android:interpolator="@interpolator/fragment_spring" />
8+
<alpha
9+
android:fromAlpha="0"
10+
android:toAlpha="1"
11+
android:duration="300"
12+
android:interpolator="@interpolator/fragment_spring" />
13+
</set>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<set xmlns:android="http://schemas.android.com/apk/res/android">
3+
<translate
4+
android:fromXDelta="0%"
5+
android:toXDelta="100%"
6+
android:duration="300"
7+
android:interpolator="@interpolator/fragment_spring" />
8+
<alpha
9+
android:fromAlpha="1"
10+
android:toAlpha="0"
11+
android:duration="300"
12+
android:interpolator="@interpolator/fragment_spring" />
13+
</set>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:tension="1.0"/>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
3+
<changeBounds
4+
android:duration="300"
5+
android:interpolator="@interpolator/fragment_spring" />
6+
<fade
7+
android:duration="300"
8+
android:interpolator="@interpolator/fragment_spring" />
9+
</transitionSet>

0 commit comments

Comments
 (0)