web-dev-qa-db-fra.com

overridePendingTransition ne fonctionne pas

J'essaie d'implémenter une transition dans mon application, mais overridePendingTransition (anim, anim) ne fonctionne pas correctement.

  • J'ai activé les transitions de fenêtre
  • Après avoir débogué le code, je peux dire que le compilateur exécute l'appel mais il n'est pas affiché.
  • J'ai essayé d'appeler finish () avant overridePendingTransition (), cela ne semble pas avoir d'effet

Mon code est simple et standard:

Démarrage de l'intention et appel à overridePendingTransition:

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

L'animation de démarrage ne doit rien faire, seule l'animation de fondu doit avoir un effet.

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"/>

fondu 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: J'ai oublié de mentionner le fait que les activités que je commence toutes étendent l'activité "principale". Serait-ce le fait qui cause le problème?

13
Tim Kranen

Je sais que c'est un ancien billet, mais je l'ai vu et je me suis senti obligé d'y répondre:

C'était un problème très obscur, et c'était lié à un appareil. J'utilisais un iOcean X7 à l'époque. Plus tard, j'ai découvert que ce téléphone n'était pas capable de lire des animations. Pour certains, il n'a pas joué d'animation sur AUCUNE application.

4
Tim Kranen

Essayez d'appeler l'attenteTransition après avoir appelé finish(), comme ceci:

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

Si vous activez le mode de débogage usb, il peut désactiver les effets de transition. Entrez les options pour les développeurs (où vous avez activé le mode de débogage), recherchez la section Interface de l'utilisateur et vérifiez si les animations sont désactivées sur l'échelle de transition de l'animation. Si tel est le cas, réglez-le sur .5x. Terminé! 

22
Jefferson Fidencio

Essayez d'utiliser ceci:

    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)
      }
    }

au lieu de votre code.

13
hardartcore

Si vous utilisez la version Android> = 21, définissez le Android: windowActivityTransitions attribut sur true dans le fichier style.xml du dossier values-v21 comme suit.

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

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

   </style>
9
Prasad

Allez dans votre appareil Options de développement, Il existe trois autres options: échelle d'animation de fenêtres, échelle d'animation de transition et échelle de durée d'animation. Assurez-vous que tout ne soit pas éteint. C'est l'une des raisons pour lesquelles je suis tombé sur.

6
user1154390

à partir de 6.0, utilisez cette méthode pour remplacer l'animation personnalisée

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());
3
koteswara D K

Vous utilisez probablement (overridePendingTransition (anim, anim)) dans votre méthode onPause () aussi.

1: Définir un booléen dans votre classe avant la méthode onCreate ()

private boolean trans=true;

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

2: Mettez trans = false; lorsque vous utilisez startActivity

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

3: Et dans votre méthode onPause () faites ceci

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

4: Et dans votre méthode onResume (), faites ceci

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

veuillez vérifier que votre appareil est en mode d'économie d'énergie. en mode économie d'énergie, les animations ne fonctionneront pas. 

0
Anshad Ali KM