0

Ich möchte eine neue Aktivität mit einer benutzerdefinierten Translate-Animation starten, also verwende ich overridePendingTransition mit meiner Animation in XML.Ändern programmgesteuert overridePendingTransition Animationen

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

Gibt es eine Möglichkeit, um eine Animation programmatisch für eine Aktivität Übergang zu modifizieren/erstellen? Ändern Sie in diesem Fall dynamisch von XDelta mit einem bestimmten Wert

+0

Warum habe ich downvoted erhalten? – moyo

+0

Eine Lösung gefunden! Posted unten – moyo

Antwort

0

Ich antworte mir selbst, nachdem ich einige Nachforschungen angestellt habe. Sie benötigen zwei Dinge:

1 - Erstellen Sie eine "transparente" Aktivität, indem Sie das folgende Thema in AndroidManifest festlegen. Wenn Sie dies nicht tun, wird ein leerer Bildschirm angezeigt:

<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. eine TranslationAnimation erstellen (oder die Animation Sie möchten) manuell, um es in die Wurzel decorView Anwendung sowie deaktivieren Sie die benutzerdefinierten Animationen sie auf 0 setzen:

 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; 

Wenn Sie wollen, dass die Reverse-Animation onBackPressed oder wenn Ihre Aktivität beendet:

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