From ddf1a55b2dc52572124c519e2b0e91c3e0ff0402 Mon Sep 17 00:00:00 2001 From: Mihai-Cristian Condrea Date: 2025年8月31日 22:41:54 +0300 Subject: [PATCH 1/2] Add spring-based fragment navigation transitions --- .../java/ui/screens/main/MainActivity.java | 16 ++++++++++++++++ app/src/main/res/anim/fragment_spring_enter.xml | 13 +++++++++++++ app/src/main/res/anim/fragment_spring_exit.xml | 13 +++++++++++++ .../main/res/anim/fragment_spring_pop_enter.xml | 13 +++++++++++++ .../main/res/anim/fragment_spring_pop_exit.xml | 13 +++++++++++++ .../main/res/interpolator/fragment_spring.xml | 4 ++++ app/src/main/res/transition/fragment_spring.xml | 9 +++++++++ 7 files changed, 81 insertions(+) create mode 100644 app/src/main/res/anim/fragment_spring_enter.xml create mode 100644 app/src/main/res/anim/fragment_spring_exit.xml create mode 100644 app/src/main/res/anim/fragment_spring_pop_enter.xml create mode 100644 app/src/main/res/anim/fragment_spring_pop_exit.xml create mode 100644 app/src/main/res/interpolator/fragment_spring.xml create mode 100644 app/src/main/res/transition/fragment_spring.xml 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..89c83388 --- /dev/null +++ b/app/src/main/res/interpolator/fragment_spring.xml @@ -0,0 +1,4 @@ + + 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 @@ + +
+ + + From 5dabe4745dee8869d88afaf469280d4b8e12aed9 Mon Sep 17 00:00:00 2001 From: Mihai-Cristian Condrea Date: 2025年8月31日 22:56:17 +0300 Subject: [PATCH 2/2] Fix interpolator resource for spring transitions --- app/src/main/res/interpolator/fragment_spring.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/interpolator/fragment_spring.xml b/app/src/main/res/interpolator/fragment_spring.xml index 89c83388..8621c6b4 100644 --- a/app/src/main/res/interpolator/fragment_spring.xml +++ b/app/src/main/res/interpolator/fragment_spring.xml @@ -1,4 +1,3 @@ - +

AltStyle によって変換されたページ (->オリジナル) /