FragmentTransation setCustomAnimations not working

27,531

Solution 1

This works in the current version of the library, but it was definitely broken previously. You can use something like this:

final FragmentManager fm = getSupportFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.anim.slide_up, R.anim.slide_down, R.anim.slide_up, R.anim.slide_down)
  .add(R.id.fragment_container, new SomeFragment(), FRAGMENT_TAG)
  .addToBackStack(FRAGMENT_TAG)
  .commit();

where R.anim.slide_up is your in animation and R.anim.slide_down is your out animation. The second pair of params (3 and 4) for setCustomAnimations allow you to specify the pop in/out animations for popping the backstack (e.g., when the user presses back, the fragment will animate away with the animation specified as the fourth param).

Solution 2

I have found a workaround for this. Override onCreateAnimation(int transit, boolean enter, int nextAnim) in your fragment class then its working fine.

@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
    return enter ? AnimationUtils.loadAnimation(getActivity(), R.anim.grow_fade_in_center) : AnimationUtils.loadAnimation(getActivity(), R.anim.shrink_fade_out_center);
}

Solution 3

I am facing the same problem too, here's my situation:

  1. I want to do some UI change after exit animation. but I found that exit animation didn't work. my UI change codes are in onBackPressed().

my solution is as following:

  1. move UI change logic in onCreateAnimator(). and then exit animation works.
Share:
27,531
blessanm86
Author by

blessanm86

My name is Blessan Mathew. I am from India. Wanted to work in the video game industry (Keeping that on the hold for now :)). I started out as a javascript developer. Worked with Dojo and Extjs. Did some mobile web app development with Sencha Touch. Worked on the android platform and focussed on java for a while and now I am back on frontend web and javascript. I'm into graphics and animations and whatever the user see's on the screen.

Updated on October 08, 2021

Comments

  • blessanm86
    blessanm86 over 2 years

    I trying to use the new android compatibility package to include fragments into my project. I am trying to include a transition animation when I add a new fragment. The thing is only one of my animation work. The In animation works but the Out animation doesn't work. I read somewhere that it is a bug in the compatibility package. But I also read that the bug was fixed in the 3rd revision of the compatibility package. Can anyone help me with this issue

    In Animation

    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/anticipate_interpolator"
    android:fromXDelta="0"
    android:toXDelta="0"
    android:fromYDelta="100%"        
    android:toYDelta="0%"
    android:duration="1000"/>
    

    Out Animation

    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_interpolator"
    android:fromXDelta="0"
    android:toXDelta="0"
    android:zAdjustment="top"
    android:fromYDelta="0%"        
    android:toYDelta="100%"
    android:duration="1000"/>
    

    This is the code I use to add fragments

    newFragment = new HelloWorldFragment();
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.setCustomAnimations(R.anim.bottom_top_animation, R.anim.top_bottom_animation);
    ft.add(R.id.outer_layout, newFragment);
    ft.addToBackStack(null);
    ft.commit();