Disabilitare l'animazione slide-in delle attività all'avvio di una nuova attività?


140

Ho un'attività che avvia un'altra attività, tramite un clic sul pulsante. Per impostazione predefinita, nelle versioni più recenti del sistema operativo di Android, il sistema operativo animerà la nuova attività scorrendo da destra a sinistra.

C'è un modo per disabilitare questa animazione? Voglio solo che la nuova attività appaia senza alcun tipo di animazione.

Risposte:


190

Il FLAG_ACTIVITY_NO_ANIMATION flag funziona correttamente per disabilitare l'animazione all'avvio delle attività.

Per disabilitare l'animazione simile che viene attivata quando si chiama finish()un'attività, ovvero l'animazione scorre da destra a sinistra, è possibile chiamare overridePendingTransition(0, 0)dopo la chiamata finish()e l'animazione successiva verrà esclusa.

Funziona anche con l'animazione se chiami overridePendingTransition(0, 0)dopo aver chiamato startActivity(...).


9
Si noti che FLAG_ACTIVITY_NO_ANIMATIONe overridePendingTransitionsono entrambi livello API 5+ solo.
azdev,

Questo non aiuta quando si torna indietro da un'attività sul tasto Indietro premere.
Anno

4
Sei il migliore. overridePendingTransition (0, 0) -> è divino. Sostituisce solo l'animazione finish (), ma non l'animazione che viene attivata quando si riprende l'attività precedente.
Philipp Jahoda,

1
Non mi piace questa risposta perché non copre le transizioni causate dalla pressione dei softkey "indietro". OP chiede come 'disabilitare' l'animazione, non 'dire in modo selettivo all'app di non riprodurla'
1owk3y

3
Se si desidera disabilitare o sovrascrivere anche l'animazione "back", sovrascrivere il metodo finish () nella propria attività e inserire quella chiamata insieme a una chiamata a super.finish (). Problema risolto.
Grishka,

171

IMHO questa risposta qui risolve il problema nel modo più elegante ..

Lo sviluppatore dovrebbe creare uno stile ,

<style name="noAnimTheme" parent="android:Theme">
  <item name="android:windowAnimationStyle">@null</item>
</style>

quindi in manifest impostalo come tema per l'attività o l'intera applicazione.

<activity android:name=".ui.ArticlesActivity" android:theme="@style/noAnimTheme">
</activity>

Ecco! Bello e facile..

ps crediti all'autore originale per favore ..


1
Non funziona per Back, e cambia l'aspetto della barra del titolo (la rende piccola) ...
Marek,

sei sicuro di non aver aggiunto altre proprietà nello stile, perché nessun altro ha segnalato questo "effetto" di cui parli ..
Ewoks,

Solo per riferimento, ciò può causare un problema in una gerarchia di viste in cui è necessario requestWindowFeature ().
Martin Marconcini,

Sarebbe bello se tu elaborassi un po ', quindi evitiamo possibili problemi
Ewoks

4
@Marek Immagino che il tuo problema non stia cambiando correttamente parent = "android: Theme". Dovresti cambiarlo con il tema che vuoi usare, fondamentalmente questo codice disabilita solo l'animazione specifica in un tema. ad esempio usa "Theme.AppCompat.Light.NoActionBar" invece di "android: Theme", e otterrai ciò che intendo. Spero possa essere d'aiuto.
Recomer,

33

Applicare

startActivity(new Intent(FirstActivity.this,SecondActivity.class));

poi

overridePendingTransition(0, 0);

Questo fermerà l'animazione.


28

Secondo me la migliore risposta è usare "overridePendingTransition(0, 0);"

per evitare di vedere l'animazione quando si desidera Intentun Activityuso:

this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);

e di non vedere l'animazione quando premi il pulsante Indietro Sostituisci onPausemetodo nel tuonewactivity

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}


13

Questo funziona per me quando disabilito l'animazione dell'attività di fine.

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}

9

Sono su 4.4.2 e la chiamata di overridePendingTransition (0, 0) nell'attività di avvio onCreate () disabiliterà l'animazione di avvio (la chiamata di overridePendingTransition (0, 0) immediatamente dopo startActivity () NON ha funzionato). Come notato in un'altra risposta, la chiamata di overridePendingTransition (0, 0) dopo finish () disattiva l'animazione di chiusura.

A proposito, ho scoperto che l'impostazione dello stile con "android: windowAnimationStyle"> @ null (un'altra risposta menzionata qui) ha causato un arresto anomalo quando la mia attività di avvio ha cercato di impostare il titolo della barra delle azioni. Eseguendo il debug, ho scoperto che in qualche modo ciò causa il fallimento di window.hasFeature (Window.FEATURE_ACTION_BAR) in initActionBar () dell'attività.


1
che dire di onresume? attività top singole e tutto il resto.
Lassi Kinnunen,

7

FLAG_ACTIVITY_NO_ANIMATION potrebbe funzionare, ma non ha funzionato per me se combinato con FLAG_ACTIVITY_CLEAR_TASK e FLAG_ACTIVITY_NEW_TASK. Apparentemente sto vedendo l'animazione per la creazione di una nuova attività con un nuovo stack di attività mentre navigo lateralmente verso le mie altre viste di livello superiore.

Ciò che ha funzionato qui è stato chiamare "overridePendingTransition (0, 0);" o immediatamente dopo la mia chiamata startActivity () o onPause (). Entrambe le cose hanno funzionato, ma farlo dopo startActivity () mi dà un po 'più di controllo su quando voglio animazioni e quando no.


2

Ho avuto un problema simile nel far apparire una schermata nera durante il passaggio scorrevole da un'attività all'altra usando overridependingtransition. e ho seguito la strada qui sotto e ha funzionato

1) creato un noanim.xmlin cartella anim

<?xml version="1.0" encoding="utf-8"?>
<translate 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="0%p"
    android:toYDelta="0%p" />

e usato

overridePendingTransition(R.drawable.lefttorightanim, R.anim.noanim);

Il primo parametro come animazione originale e il secondo parametro che è l'animazione di uscita come animazione fittizia


1

Al fine di evitare lo sfondo nero quando si avvia un'attività già nello stack, ho aggiunto overridePendingTransition(0,0)in onStart():

@Override
protected void onStart() {
    overridePendingTransition(0,0);
    super.onStart();

}
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.