0

Je veux démarrer une nouvelle activité avec une animation de traduction personnalisée, donc j'utilise overridePendingTransition avec mon animation en xml.Modifier par programmation des animations overridePendingTransition

overridePendingTransition(R.anim.enter_from_right, R.anim.exit_to_left) 

enter_from_right.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android" 
android:shareInterpolator="false"> 
<translate 
    android:fromXDelta="100%" android:toXDelta="0%" 
    android:fromYDelta="0%" android:toYDelta="0%" 
    android:duration="350" /> 

Est-il possible de modifier/créer une animation programme pour une transition d'activité? Dans ce cas, modifier de XDelta avec une valeur spécifique dynamiquement

+0

Pourquoi ai-je été downvoted? – moyo

+0

J'ai trouvé une solution! Publié ci-dessous – moyo

Répondre

0

Je vais me répondre, après avoir fait quelques recherches. Vous avez besoin de deux choses:

1 - Créez une activité "transparente" en définissant le thème suivant dans AndroidManifest. Si vous ne le faites pas, un écran vide apparaît:

<style name="TransparentActivity" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:backgroundDimEnabled">false</item> 
</style> 

2. Créer une TranslationAnimation (ou l'animation que vous voulez) manuellement, en l'appliquant à la decorView racine, ainsi que désactiver les animations personnalisées par les mettre à 0:

 overridePendingTransition(0, 0); 

     // Custom transition 
     TranslateAnimation translateAnimation = new TranslateAnimation(-translationLength, 0, 0, 0); 
     translateAnimation.setDuration(350); 
     translateAnimation.setFillAfter(true); 
     View rootView = getWindow().getDecorView().findViewById(android.R.id.content); 

     rootView.startAnimation(translateAnimation); 

     rootView.getLayoutParams().width = translationLength; 

Si vous voulez que l'animation inverse onBackPressed ou lorsque votre activité finitions:

@Override 
public void finish() { 
     overridePendingTransition(0, 0); 
     TranslateAnimation translateAnimation = new TranslateAnimation(0, -translationLength, 0, 0); 
     translateAnimation.setDuration(350); 
     translateAnimation.setFillAfter(true); 
     translateAnimation.setAnimationListener(new Animation.AnimationListener() { 
      @Override 
      public void onAnimationStart(Animation animation) { 
      } 

      @Override 
      public void onAnimationEnd(Animation animation) { 
       YourActivity.super.finish(); 
      } 

      @Override 
      public void onAnimationRepeat(Animation animation) { 

      } 
     }); 
     getWindow().getDecorView().findViewById(android.R.id.content).startAnimation(translateAnimation); 
}