overridePendingTransition not working

2019-02-06 12:34发布

问题:

I'm trying to implement a transition in my app but overridePendingTransition(anim, anim) is not working correctly.

  • I have window transitions enabled
  • After debugging the code I can say that the compiler does execute the call but it is NOT shown
  • I have tried calling finish() before overridePendingTransition() this does not seem to have any effect

My code is simple and standard:

Starting the intent and calling overridePendingTransition:

Intent newsIntent = new Intent(ZPFActivity.this, More2013Activity.class);
startActivity(newsIntent);
overridePendingTransition(R.anim.slide_no_move, R.anim.fade);
finish();

The start animation should not do anything only the fade animation should have effect.

slide_no_move XML:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="0%p" android:toYDelta="0%p"
android:duration="500"/>

fade XML:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" 
 android:fillAfter="true">
 <alpha android:fromAlpha="1.0" 
        android:toAlpha="0.0"
        android:duration="500"/>
</set>

EDIT: I forgot to mention the fact that the activities that I start all extend the 'main' activity. Could this be the fact that is causing the problem?

回答1:

Try to call the pendingTransition after calling finish(), like this:

Intent newsIntent = new Intent(ZPFActivity.this, More2013Activity.class);
startActivity(newsIntent);
finish();
overridePendingTransition(R.anim.slide_no_move, R.anim.fade);


回答2:

If you activate usb debugging mode, it can disable the transitions effects. Enter Developer options (where you activated debugging mode), find the user's interface section, check if the animation's transition scale have the animations disabled. If so, set it to .5x. Done!



回答3:

Try using this :

    public class More2013Activity extends Activity{
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          overridePendingTransition(R.anim. slide_no_move, R.anim.fade_in);
          setContentView(R.layout.more_activity)
      }
    }

instead of your code.



回答4:

If you are using android version >= 21 then make the android:windowActivityTransitions attribute to true in the style.xml file in the values-v21 folder as follows.

   <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

       <item name="android:windowActivityTransitions">true</item>

   </style>


回答5:

Go in your device Developer Options, There are three further options windows animation scale, Transition Animation scale and Animation duration scale. Make sure all are not off. This is one of the reason I came across.



回答6:

I know this is an old post, but I saw it and felt obligated to answer it:

It was a very obscure problem, and it was device related. I was using an iOcean X7 at the time. Later I found out that this Phone was not able to play animations. For some it did not play animations on ANY app.



回答7:

from 6.0 use this method to override the custom animation

ActivityOptions options = ActivityOptions.makeCustomAnimation(context,R.anim.slide_from_right, R.anim.slide_to_left);
Intent intent = new Intent(context, WhichActivityToOpen.class);
context.startActivity(intent, options.toBundle());


回答8:

Probably you are using overridePendingTransition(anim, anim) in your onPause() method too. I had the same problem but I solve it by a tiny trick.

1:Define a boolean in your class before onCreate() method

private boolean trans=true;

@Override
protected void onCreate(Bundle savedInstanceState) {...

2:Put trans = false; when you you use startActivity

Intent newsIntent = newIntent(ZPFActivity.this,More2013Activity.class);         
 trans = false;        
 startActivity(newsIntent);        
 overridePendingTransition(R.anim.slide_no_move, R.anim.fade);

3:And in your onPause() method do this

@Override
protected void onPause() {
    if (trans) {
        overridePendingTransition(R.anim.slide_no_move, R.anim.fade);
    }
    super.onPause();
}

4:And in your onResume() method do this

@Override
protected void onResume() {
    super.onResume();
    trans=true;
}


回答9:

please check your device is in power saving mode. in power saving mode animations will not work.