2010-12-02 5 views
67

Ich benutze overridePendingTransition für, wenn meine Aktivität erstellt wird und das funktioniert gut Ich kann sehen, die Einblendung funktioniert gut, aber wenn ich versuche, das Ende der Aktivität zu animieren Es macht immer noch die Standard-Folie von rechts nach links.Wie kann ich der Aktivität eine Animation hinzufügen()

Ich versuchte zunächst, die Out-Animation definieren, wenn ich die Aktivität beginnen wie folgt:

Intent myIntent = new Intent(a, SkdyAlert.class); 
    myIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    a.startActivity(myIntent); 
    if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) { 
     AnimationHelper.overridePendingTransition(a, R.anim.fadein, R.anim.fadeout); 
    } 

Dann habe ich versucht, es zu tun, wenn ich die Tätigkeit beenden und

okBtn.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      finish(); 
      if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) { 
       AnimationHelper.overridePendingTransition(activity, 0, R.anim.fadeout); 
      } 
     } 
    }); 

Aber keiner dieser Ansätze wird die Folie "von rechts nach links" für die Ausgangsanimation verhindern. Irgendwelche Ideen, was ich falsch mache?

Antwort

186

Ich überschreitige ausstehende Transition direkt nach dem Aufruf von finish();

In meinem Fall habe ich es getan, um Übergänge zu vermeiden.

finish(); 
Details.this.overridePendingTransition(R.anim.nothing,R.anim.nothing); 

Bestellung wichtig ist :)

+4

von "Details", @Goofyahead ist Benennen seiner umschließenden Aktivität - Ymmv. Diese Technik hat mir geholfen, eine Animation aus Theme.Dialog auf 2.x, aber nicht 3.x oder 4.x zu ersetzen. – larham1

+7

Wie sieht 'R.anim.nothing' aus? – sandalone

+0

Verwenden @Felipe Micaroni Lalli Antwort, 0 bedeuten keine Animation. – Yeung

11

Schauen Sie sich durch ein Thema zu tun. Sie können Enter-Exit-Animationen für Aktivitäten oder die gesamte Anwendung definieren.

+0

JA! Das war's. Naja. Ich hatte bereits ein Thema angewendet, und das Thema hatte eine Animation, deshalb konnte ich meine eigene Animation nicht zum Laufen bringen. Vielen Dank für die Einsicht! –

+2

können Sie mir einen Hinweis geben, wo Sie nachsehen können, welche Transitionen von den Themen geliefert werden. Ich möchte auch einen benutzerdefinierten Übergang zu allen Websites festlegen, aber ich weiß nicht wie. –

+0

@schwiz Ein Code oder ein Beispiel wäre nett. – Zapnologica

6

Im Anschluss an die Antwort von @schwiz, hier ist eine Animation Überschreibung für das integrierte Dialog Thema, wo ich lokale slide_up und slide_down Animationen definiert haben. Meine Aktivität gibt das Thema MyDialog an, um diese Übergänge ein- und auszublenden.

<style name="Animation.MyDialog" parent="android:Animation.Dialog"> 
    <item name="android:windowEnterAnimation">@anim/slide_up</item> 
    <item name="android:windowExitAnimation">@anim/slide_down</item> 
</style> 

<style name="Theme.MyDialog" parent="android:Theme.Dialog"> 
    <item name="android:windowAnimationStyle">@style/Animation.MyDialog</item> 
</style> 

13
finish(); 
overridePendingTransition(0, 0); 
5

Verwenden startActivityForResult Ihr Kind Aktivität beginnen und in onActivityResult() Ihrer Mutter Aktivität:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode==REQUEST_YOUR_ACTIVITY) { 
     overridePendingTransition(R.anim.parent_appearing_anim, R.anim.child_dissmissing_anim); 
    } 
    super.onActivityResult(requestCode, resultCode, arg2); 
} 
+0

Dies funktioniert beim Zurückdrücken (physische Taste). Um dies auch mit dem Pfeil "nach oben" zu tun, siehe folgende Antwort: [https://stackoverflow.com/questions/20161234/onactivityresult-ist-not-called-when-the-back-button-in-actionbar-is -clicked/20161352 # 20161352] (https://stackoverflow.com/questions/20161234/onactivityresult-is-not-called-when-the-back-button-in-actionbar-is-clicked/20161352#20161352) – lenooh

14

Ich reparierte dieses Problem mit dieser Art von Ansatz:

mit Animation zu öffnen:

Intent newUser = new Intent(getBaseContext(), NewUserActivity.class); 
    startActivity(newUser); 
    overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left); 

mit Animation zu Schließen:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    onBackPressed(); 
    return super.onOptionsItemSelected(item); 
} 

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    overridePendingTransition(R.anim.slide_out_right,R.anim.slide_in_right); 
} 
13

Ich würde vorschlagen, isFinishing() -Methode zu verwenden, um die Animationen bei onPause statt Aufruf finish()

zu konfigurieren
@Override 
protected void onPause() { 
    super.onPause(); 
    if (isFinishing()){ 
     overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out); 
    } 

} 
11

Diese Frage wurde bereits beantwortet, aber die effizienteste Möglichkeit, eine Animation beim Beenden einer Aktivität einzufügen, besteht darin, die Methode "finish()" des betreffenden Objekts zu überschreiben Aktivität:

@Override 
public void finish() { 
    super.finish(); 
    overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom); 
} 
+1

did nicht mit mir arbeiten –

+0

Hast du genau das versucht, was ich geschrieben habe (innerhalb einer Aktivität)? – webmaster

0
if (getEnterAnimation() > -1 && getExitAnimation() > -1) { 
    overridePendingTransition(getEnterAnimation(), getExitAnimation()); 
} 

wo diese Methoden Animationen von R.anim zurückzukehren.YOUR_ANIMATION_XML

fügen Sie diesen Code in Ihre onCreate() vor

setContentView() 

und in Ihrem onPause() vor

super.onPause() 

ich diesen Code versucht, indem vor/innerhalb dieser Methoden, aber der Ausgang Animation nie bearbeitet

startActivity() 
finish() 
onBackPressed() 
Verwandte Themen