Skip to content

Commit

Permalink
[Feature] Add default fade in/out animation when rebuild was called
Browse files Browse the repository at this point in the history
  • Loading branch information
rh-id committed Nov 5, 2021
1 parent 90ae79e commit ec3997c
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ public class NavConfiguration<ACT extends Activity, SV extends StatefulView> {
private Animation defaultExitAnimation;
private Animation defaultPopEnterAnimation;
private Animation defaultPopExitAnimation;
private Animation defaultReBuildEnterAnimation;
private Animation defaultReBuildExitAnimation;
private File saveStateFile;
private Cipher saveStateEncryptCipher;
private Cipher saveStateDecryptCipher;
Expand Down Expand Up @@ -65,6 +67,14 @@ public Animation getDefaultPopExitAnimation() {
return defaultPopExitAnimation;
}

public Animation getDefaultReBuildEnterAnimation() {
return defaultReBuildEnterAnimation;
}

public Animation getDefaultReBuildExitAnimation() {
return defaultReBuildExitAnimation;
}

public File getSaveStateFile() {
return saveStateFile;
}
Expand All @@ -84,6 +94,8 @@ public static class Builder<ACT extends Activity, SV extends StatefulView> {
private Animation exitAnimation;
private Animation popEnterAnimation;
private Animation popExitAnimation;
private Animation reBuildEnterAnimation;
private Animation reBuildExitAnimation;
private File saveStateFile;
private Cipher saveStateEncryptCipher;
private Cipher saveStateDecryptCipher;
Expand Down Expand Up @@ -113,6 +125,18 @@ public Builder setAnimation(Animation enterAnimation, Animation exitAnimation, A
return this;
}

/**
* Set default animation for this navigator when reBuildRoute is invoked
*
* @param enterAnimation Animation when next view showing
* @param exitAnimation Animation when current view exiting
*/
public Builder setReBuildAnimation(Animation enterAnimation, Animation exitAnimation) {
this.reBuildEnterAnimation = enterAnimation;
this.reBuildExitAnimation = exitAnimation;
return this;
}

/**
* Provide file to save state, this file will be re-created and deleted as necessary.
* <p>
Expand Down Expand Up @@ -178,10 +202,22 @@ public NavConfiguration<ACT, SV> build() {
outAnimationSet.addAnimation(new TranslateAnimation(0, 0, 0, 100));
popExitAnimation = outAnimationSet;
}
if (reBuildEnterAnimation == null) {
Animation inAnimation = new AlphaAnimation(0, 1);
inAnimation.setDuration(200);
reBuildEnterAnimation = inAnimation;
}
if (reBuildExitAnimation == null) {
Animation outAnimation = new AlphaAnimation(1, 0);
outAnimation.setDuration(200);
reBuildExitAnimation = outAnimation;
}
navConfiguration.defaultEnterAnimation = enterAnimation;
navConfiguration.defaultExitAnimation = exitAnimation;
navConfiguration.defaultPopEnterAnimation = popEnterAnimation;
navConfiguration.defaultPopExitAnimation = popExitAnimation;
navConfiguration.defaultReBuildEnterAnimation = reBuildEnterAnimation;
navConfiguration.defaultReBuildExitAnimation = reBuildExitAnimation;
navConfiguration.saveStateFile = saveStateFile;
if (saveStateEncryptCipher == null || saveStateDecryptCipher == null) {
navConfiguration.saveStateEncryptCipher = new NullCipher();
Expand Down
6 changes: 5 additions & 1 deletion navigator/src/main/java/m/co/rh/id/anavigator/Navigator.java
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,9 @@ public void reBuildRoute(int routeIndex) {
viewAnimator.removeViewAt(selectedViewIndex);
viewAnimator.addView(buildView, selectedViewIndex);
if (childView == currentView) {
// animate only when current view is showing
viewAnimator.setInAnimation(mNavConfiguration.getDefaultReBuildEnterAnimation());
viewAnimator.setOutAnimation(mNavConfiguration.getDefaultReBuildExitAnimation());
viewAnimator.setDisplayedChild(selectedViewIndex);
}
initViewNavigator();
Expand All @@ -360,8 +363,9 @@ public void reBuildAllRoute() {
newViewAnimator.addView(view);
}
newViewAnimator.setDisplayedChild(mNavRouteStack.size() - 1);
getViewAnimator().removeAllViews();
getViewAnimator().startAnimation(mNavConfiguration.getDefaultReBuildExitAnimation());
setViewAnimator(mActivity, newViewAnimator);
newViewAnimator.startAnimation(mNavConfiguration.getDefaultReBuildEnterAnimation());
initViewNavigator();
mIsNavigating = false;
if (!mPendingNavigatorRoute.isEmpty()) {
Expand Down

0 comments on commit ec3997c

Please sign in to comment.