Desativar animação de slide de atividade ao iniciar nova atividade?

140

Eu tenho uma atividade que inicia outra atividade, através de um clique no botão. Por padrão, nas versões mais recentes do sistema operacional Android, o sistema operacional animará a nova atividade deslizando da direita para a esquerda.

Existe uma maneira de desativar esta animação? Eu só quero que a nova atividade apareça sem nenhum tipo de animação.

user246114
fonte

Respostas:

190

O FLAG_ACTIVITY_NO_ANIMATIONsinalizador funciona bem para desativar a animação ao iniciar atividades.

Para desativar a animação semelhante que é acionada ao chamar finish()uma Atividade, ou seja, a animação desliza da direita para a esquerda, você pode ligar overridePendingTransition(0, 0)após a chamada finish()e a próxima animação será excluída.

Isso também funciona na animação se você ligar overridePendingTransition(0, 0)após ligar startActivity(...).

Mattias
fonte
9
Observe que FLAG_ACTIVITY_NO_ANIMATIONe overridePendingTransitionambos são API Level 5+ apenas.
azdev
Isso não ajuda ao retornar de uma atividade na tecla Voltar.
Yar
4
Você é o melhor. overridePendingTransition (0, 0) -> é divino. Ele substitui apenas a animação finish (), mas não a animação que é acionada ao retomar a atividade anterior.
Philipp Jahoda
1
Não gosto desta resposta porque ela não cobre transições causadas ao pressionar as teclas de função 'voltar'. OP pergunta como 'desativar' a animação, não 'seletivamente dizer o aplicativo para não jogá-lo'
1owk3y
3
Se você deseja desativar ou substituir também a animação "back", substitua o método finish () em sua atividade e faça a chamada junto com uma chamada para super.finish (). Problema resolvido.
Grishka 5/0316
171

IMHO esta resposta aqui resolver questão da maneira mais elegante ..

O desenvolvedor deve criar um estilo ,

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

então, no manifesto, defina-o como tema para atividade ou aplicativo inteiro.

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

Voila! Legal e fácil..

ps créditos ao autor original por favor ..

Ewoks
fonte
1
Ele não funciona para Back, e muda o olhar de barra de título (que torna mais pequeno) ...
Marek
são u certeza u não adicionar algumas outras propriedades no estilo, motivo de mais ninguém tem relatado este "efeito" u mencionar ..
Ewoks
Apenas para referência, isso pode causar um problema em uma hierarquia de exibição em que você precisa solicitarWindowFeature ().
Martin Marconcini 15/07/2013
Seria bom se u elaborar um pouco, por isso evitar problemas posible
Ewoks
4
@Marek Acho que seu problema não está mudando o parent = "android: Theme" corretamente. Você deve alterá-lo com o tema que deseja usar, basicamente esse código desativa a animação específica em um tema. por exemplo, use "Theme.AppCompat.Light.NoActionBar" em vez de "android: Theme" e você entenderá o que quero dizer. Espero que ajude.
Recomer
33

Aplique

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

então

overridePendingTransition(0, 0);

Isso interromperá a animação.

Siddharth_Vyas
fonte
28

Na minha opinião, a melhor resposta é usar "overridePendingTransition(0, 0);"

para evitar ver animação quando você quer Intenta uma Activityutilização:

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

e para não ver a animação quando você pressiona o botão Voltar onPause.newactivity

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

Basta especificar o Intent.FLAG_ACTIVITY_NO_ANIMATIONsinalizador ao iniciar

Alexander Kosenkov
fonte
13

Isso funciona para mim ao desativar a animação de atividade final.

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

Estou no 4.4.2, e chamar overridePendingTransition (0, 0) no onCreate () da atividade de inicialização desativará a animação inicial (chamar overridePendingTransition (0, 0) imediatamente após startActivity () NÃO funcionou). Conforme observado em outra resposta, a chamada overridePendingTransition (0, 0) após concluir () desativa a animação de fechamento.

Aliás, descobri que definir o estilo com "android: windowAnimationStyle"> @ null (outra resposta mencionada aqui) causou uma falha quando minha atividade de inicialização tentou definir o título da barra de ação. Depurando ainda mais, descobri que de alguma forma isso faz com que window.hasFeature (Window.FEATURE_ACTION_BAR) falhe no initActionBar () da atividade.

Steve B
fonte
1
e quanto ao currículo? atividades principais únicas e tudo isso.
Lassi Kinnunen
7

FLAG_ACTIVITY_NO_ANIMATION pode funcionar, mas não estava funcionando bem quando combinado com FLAG_ACTIVITY_CLEAR_TASK e FLAG_ACTIVITY_NEW_TASK. Aparentemente, estou vendo a animação para criar uma nova tarefa com uma nova pilha de atividades enquanto navego lateralmente para minhas outras visualizações de nível superior.

O que funcionou aqui foi chamar "overridePendingTransition (0, 0);" imediatamente após minha chamada startActivity () ou onPause (). Ambas as formas funcionaram, mas fazê-lo após startActivity () me dá um pouco mais de controle sobre quando quero animações e quando não.

Wookie
fonte
2

Eu tive um problema semelhante ao obter uma tela preta na transição deslizante de uma atividade para outra usando overridependingtransition. e eu segui o caminho abaixo e funcionou

1) criou uma noanim.xmlpasta 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 usado

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

O primeiro parâmetro como minha animação original e o segundo parâmetro que é a animação de saída como minha animação fictícia

Karthika PB
fonte
1

A fim de evitar o fundo preto quando se inicia uma actividade já na pilha, I adicionado overridePendingTransition(0,0)em onStart():

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

}
Alex Huiculescu
fonte