Risposte:
Puoi farlo con Activity.overridePendingTransition()
. È possibile definire semplici animazioni di transizione in un file di risorse XML.
onCreate
funzione della tua attività .
Ecco il codice per eseguire una dissolvenza graduale tra due attività.
Creare un file denominato fadein.xml
inres/anim
<?xml version="1.0" encoding="utf-8"?>
<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="2000" />
Creare un file denominato fadeout.xml
inres/anim
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="2000" />
Se si vuole svanire da Activity A alla Attività B , inserire il seguente nel onCreate()
metodo per Attività B . Prima setContentView()
funziona per me.
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
Se le dissolvenze sono troppo lente per te, cambia android:duration
i file XML sopra in qualcosa di più piccolo.
overridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);
visualizzazione di questi file può anche darti suggerimenti su come migliorare le tue animazioni personalizzate (ad es. Facendo sì che la dissolvenza duri più a lungo della dissolvenza).
fadein
e fadeout
di fade_in
e fade_out
. Dal post di Dan J
overridePendingTransition()
subito dopo aver chiamato finish()
e / o startActivity()
. Sono stato in grado di ottenere una bella dissolvenza in questo modo chiamandolo subito dopo il lancio della nuova attività.
Un modo ancora semplice per farlo è:
<style name="WindowAnimationTransition"> <item name="android:windowEnterAnimation">@android:anim/fade_in</item> <item name="android:windowExitAnimation">@android:anim/fade_out</item> </style>
<style name="AppBaseTheme" parent="Theme.Material.Light.DarkActionBar"> <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item> </style>
Questo è tutto :)
Sì. Puoi dire al sistema operativo che tipo di transizione vuoi avere per la tua attività.
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().setWindowAnimations(ANIMATION);
...
}
Dove ANIMATION è un numero intero che fa riferimento a un'animazione integrata nel sistema operativo.
crea res> anim> fadein.xml
<?xml version="1.0" encoding="utf-8"?>
<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" />
crea res> anim> fadeout.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
In res> valori> styles.xml
<style name="Fade">
<item name="android:windowEnterAnimation">@anim/fadein</item>
<item name="android:windowExitAnimation">@anim/fadeout</item>
</style>
Nelle attività onCreate ()
getWindow().getAttributes().windowAnimations = R.style.Fade;
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Per un elenco di animazioni predefinite, consultare: http://developer.android.com/reference/android/R.anim.html
Esiste infatti fade_in
e fade_out
per API livello 1 e fino.
Sovrascrivo l'animazione dell'attività predefinita. Lo collaudo in api 15 che funziona senza problemi. Ecco la soluzione che utilizzo:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorPrimary</item>
<item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item>
</style>
<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
<item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
<item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item>
<item name="android:activityCloseExitAnimation">@anim/slide_out_right</item>
</style>
Crea una cartella anim nella cartella res e quindi crea questi quattro file di animazione:
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="-100%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
Puoi scaricare il mio progetto di esempio .
È tutto... :)
Ecco il codice per fare una bella sequenza tra due attività.
effetto liscio da sinistra a destra
Crea un file chiamato slide_in_right.xml e slide_out_right.xml in res / anim
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="5000" android:fromXDelta="100%" android:toXDelta="0%" />
<alpha android:duration="5000" android:fromAlpha="0.0" android:toAlpha="1.0" />
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="5000" android:fromXDelta="0%" android:toXDelta="-100%"/>
<alpha android:duration="5000" android:fromAlpha="1.0" android:toAlpha="0.0" />
</set>
effetto liscio da destra a sinistra
Creare un file chiamato animation_enter.xml e animation_leave.xml in res / anim
animation_enter.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="700"/>
</set>
animation_leave.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0%" android:toXDelta="100%"
android:fromYDelta="0%" android:toYDelta="0%"
android:duration="700" />
</set>
Passa da un'attività alla seconda attività
Intent intent_next=new Intent(One_Activity.this,Second_Activity.class);
overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_right);
startActivity(intent_next);
finish();
4. Al momento dell'evento, premere Indietro o passare dalla seconda attività a un'attività
Intent home_intent = new Intent(Second_Activity.this, One_Activity.class);
overridePendingTransition(R.anim.animation_enter, R.anim.animation_leave);
startActivity(home_intent);
finish();
overridePendingTransition
immediatamente dopo startActivity: developer.android.com/reference/android/app/…
Non è possibile utilizzare overridePendingTransition in Android 1.5. overridePendingTransistion è arrivato su Android 2.0.
Se lo attraverserai senza alcun errore, dovrai compilare per il target (1.5 o versione successiva) usando le animazioni ordinarie (o sei il tuo) o devi compilare per il target (2.0 o versione successiva) usando overridePendingTransistion.
Riepilogo: non è possibile utilizzare overridePendingTransistion in Android 1.5 .
Puoi comunque usare le animazioni integrate nel sistema operativo.
IN GALAXY:
Devi assicurarti di non averlo spento nel dispositivo usando Impostazioni> Opzioni sviluppatore:
Usa l'API ActivityCompat.startActivity () funziona> 21.
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE);
ActivityCompat.startActivity(activity, intent, options.toBundle());
Alcune versioni di Android supportano Activity
transizioni personalizzate e altre no (dispositivi meno recenti ). Se si desidera utilizzare le transizioni personalizzate, è buona norma verificare se Activity
ha il overridePendingTransition()
metodo, come nelle versioni precedenti.
Per sapere se il metodo esiste o meno, è possibile utilizzare l'API di riflessione. Ecco il semplice codice che controllerà e restituirà il metodo se esiste:
Method mOverridePendingTransition;
try {
mOverridePendingTransition = Activity.class.getMethod(
"overridePendingTransition", new Class[] { Integer.TYPE, Integer.TYPE } );
/* success */
} catch (NoSuchMethodException nsme) {
/* failure, this version of Android doesn't have this method */
}
E quindi, possiamo applicare la nostra transizione, ovvero utilizzare questo metodo se esiste:
if (UIConstants.mOverridePendingTransition != null) {
try {
UIConstants.mOverridePendingTransition.invoke(MainActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out);
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
Qui, ad esempio, sono state utilizzate semplici animazioni di dissolvenza in entrata e in uscita per la dimostrazione della transizione.
rimpicciolisci l'animazione
Intent i = new Intent(getApplicationContext(), LoginActivity.class);
overridePendingTransition(R.anim.zoom_enter, R.anim.zoom_exit);
startActivity(i);
finish();
zoom_enter
<?xml version="1.0" encoding="utf-8"?>
<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" />
zoom_exit
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:fillAfter="true"
android:duration="500" />
overridePendingTransition
risposte completamente correlate di seguito: puoi passare(0, 0)
se non desideri alcuna animazione.