Posso modificare l'animazione di transizione startActivity () di Android?


Risposte:


33

Nella stessa istruzione in cui esegui finish (), esegui anche la tua animazione. Quindi, nella nuova attività, esegui un'altra animazione. Vedi questo codice:

fadein.xml

<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"/> //Time in milliseconds
</set>

Nella tua classe finale

private void finishTask() {
    if("blabbla".equals("blablabla"){
        finish();
        runFadeInAnimation();
    }
}

private void runFadeInAnimation() {
    Animation a = AnimationUtils.loadAnimation(this, R.anim.fadein);
    a.reset();
    LinearLayout ll = (LinearLayout) findViewById(R.id.yourviewhere);
    ll.clearAnimation();
    ll.startAnimation(a);   
}

fadeout.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
           android:fillAfter="true">
  <alpha android:fromAlpha="0.0"
         android:toAlpha="1.0"
         android:duration="500"/>
</set>

Nella tua nuova classe Activity crei un metodo simile come runFadeAnimation che ho scritto e poi lo esegui in onCreate e non dimenticare di cambiare l'id delle risorse in fadeout.


1
Inoltre, potrebbe essere meglio utilizzare il tempo di animazione breve predefinito:android:duration="@android:integer/config_shortAnimTime"
elimirks

dov'èrunFadeAnimation()
Choletski

2
Ragazzi, assicuratevi di vedere la vera risposta sotto questo post.
Sviluppatore Android

cos'è blabbla ?? !!
Ali Khaki

288

A partire dal livello API 5 è possibile chiamare immediatamente overridePendingTransition per specificare un'animazione di transizione esplicita:

startActivity();
overridePendingTransition(R.anim.hold, R.anim.fade_in);

o

finish();
overridePendingTransition(R.anim.hold, R.anim.fade_out);

17
Aggiungi qualcosa come: @Override public void onBackPressed () {super.onBackPressed (); overridePendingTransition (R.anim.hold, R.anim.fade_out); } per aggiungere indietro le animazioni.
RightHandedMonkey

1
Questa dovrebbe essere la migliore risposta pulita.
cy198706

1
@RightHandedMonkey Per aggiungere nuovamente le animazioni, sovrascrivere meglio il finish (); metodo dell'attività nel caso in cui l'attività termini con qualcos'altro rispetto al pulsante Indietro (es. un pulsante di uscita personalizzato ...).
Itiel Maimon

43

Guarda i temi su Android: http://developer.android.com/guide/topics/ui/themes.html .

Sotto temi.xml dovrebbe esserci android:windowAnimationStyledove puoi vedere la dichiarazione dello stile in styles.xml .

Esempio di implementazione:

<style name="AppTheme" parent="...">

    ...

    <item name="android:windowAnimationStyle">@style/WindowAnimationStyle</item>

</style>

<style name="WindowAnimationStyle">
    <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
    <item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>



3
Soluzione migliore .
Abhishek kumar

Come accederesti @android:anim/fade_indal codice java?
Tamoxin

17

Uso overridePendingTransition

startActivity();
overridePendingTransition(R.anim.fadein, R.anim.fadeout);

fadein.xml

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

fadeout.xml

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

9

Per fadeIn e fadeOut , aggiungilo solo dopo super.onCreate (savedInstanceState) nella tua nuova classe Activity. Non è necessario creare qualcos'altro (nessun XML, nessuna cartella anim, nessuna funzione extra).

overridePendingTransition(R.anim.abc_fade_in,R.anim.abc_fade_out);

1
overridePendingTransition (android.R.anim.fade_in, android.R.anim.fade_out);
Farid Z

9

Se vuoi sempre la stessa animazione di transizione per l'attività

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

@Override
protected void onPause() {
    super.onPause();
    if (isFinishing()) {
        overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
    }
}

4

Puoi semplicemente creare un contesto e fare qualcosa come di seguito: -

private Context context = this;

E la tua animazione: -

((Activity) context).overridePendingTransition(R.anim.abc_slide_in_bottom,R.anim.abc_slide_out_bottom);

Puoi usare qualsiasi animazione tu voglia.


1

Volevo utilizzare la soluzione styles.xml, ma non ha funzionato per me con le attività. Si scopre che invece di usare android:windowEnterAnimatione android:windowExitAnimation, ho bisogno di usare le animazioni delle attività come questa:

<style name="ActivityAnimation.Vertical" parent="">
    <item name="android:activityOpenEnterAnimation">@anim/enter_from_bottom</item>
    <item name="android:activityOpenExitAnimation">@anim/exit_to_bottom</item>
    <item name="android:activityCloseEnterAnimation">@anim/enter_from_bottom</item>
    <item name="android:activityCloseExitAnimation">@anim/exit_to_bottom</item>
    <item name="android:windowEnterAnimation">@anim/enter_from_bottom</item>
    <item name="android:windowExitAnimation">@anim/exit_to_bottom</item>
</style>

0
 // CREATE anim 

 // CREATE animation,animation2  xml // animation like fade out 

  Intent myIntent1 = new Intent(getApplicationContext(), Attend.class);
  Bundle bndlanimation1 =  ActivityOptions.makeCustomAnimation(getApplicationContext(), 
  R.anim.animation, R.anim.animation2).toBundle();
  tartActivity(myIntent1, bndlanimation1);

0

La maggior parte delle risposte sono abbastanza corrette, ma alcune di esse sono deprecate come quando si utilizza R.anim.hold e alcune di esse stanno solo elaborando il processo.

Quindi puoi usare:

startActivity(intent);
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.