diff --git a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java
index 69803624..3308efb4 100644
--- a/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java
+++ b/app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java
@@ -24,6 +24,7 @@
import androidx.lifecycle.ViewModelProvider;
import androidx.navigation.NavController;
import androidx.navigation.NavGraph;
+import androidx.navigation.NavOptions;
import androidx.navigation.fragment.NavHostFragment;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
@@ -217,10 +218,25 @@ private void observeViewModel() {
navGraph.setStartDestination(uiState.getDefaultNavDestination());
navController.setGraph(navGraph);
+ NavOptions springNavOptions = new NavOptions.Builder()
+ .setEnterAnim(R.anim.fragment_spring_enter)
+ .setExitAnim(R.anim.fragment_spring_exit)
+ .setPopEnterAnim(R.anim.fragment_spring_pop_enter)
+ .setPopExitAnim(R.anim.fragment_spring_pop_exit)
+ .build();
+
if (mBinding.navView instanceof BottomNavigationView bottomNav) {
NavigationUI.setupWithNavController(bottomNav, navController);
+ bottomNav.setOnItemSelectedListener(item -> {
+ navController.navigate(item.getItemId(), null, springNavOptions);
+ return true;
+ });
} else if (mBinding.navView instanceof NavigationRailView railView) {
NavigationUI.setupWithNavController(railView, navController);
+ railView.setOnItemSelectedListener(item -> {
+ navController.navigate(item.getItemId(), null, springNavOptions);
+ return true;
+ });
}
setSupportActionBar(mBinding.toolbar);
diff --git a/app/src/main/res/anim/fragment_spring_enter.xml b/app/src/main/res/anim/fragment_spring_enter.xml
new file mode 100644
index 00000000..0bded03a
--- /dev/null
+++ b/app/src/main/res/anim/fragment_spring_enter.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/anim/fragment_spring_exit.xml b/app/src/main/res/anim/fragment_spring_exit.xml
new file mode 100644
index 00000000..e7d0be19
--- /dev/null
+++ b/app/src/main/res/anim/fragment_spring_exit.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/anim/fragment_spring_pop_enter.xml b/app/src/main/res/anim/fragment_spring_pop_enter.xml
new file mode 100644
index 00000000..f734c469
--- /dev/null
+++ b/app/src/main/res/anim/fragment_spring_pop_enter.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/anim/fragment_spring_pop_exit.xml b/app/src/main/res/anim/fragment_spring_pop_exit.xml
new file mode 100644
index 00000000..3ef11c06
--- /dev/null
+++ b/app/src/main/res/anim/fragment_spring_pop_exit.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/interpolator/fragment_spring.xml b/app/src/main/res/interpolator/fragment_spring.xml
new file mode 100644
index 00000000..8621c6b4
--- /dev/null
+++ b/app/src/main/res/interpolator/fragment_spring.xml
@@ -0,0 +1,3 @@
+
+
diff --git a/app/src/main/res/transition/fragment_spring.xml b/app/src/main/res/transition/fragment_spring.xml
new file mode 100644
index 00000000..9f2ecf81
--- /dev/null
+++ b/app/src/main/res/transition/fragment_spring.xml
@@ -0,0 +1,9 @@
+
+
+
+
+