Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ddf1a55

Browse files
Add spring-based fragment navigation transitions
1 parent c88a00d commit ddf1a55

File tree

7 files changed

+81
-0
lines changed

7 files changed

+81
-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: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<springInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:stiffness="400"
4+
android:dampingRatio="0.5"/>
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)

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