Respostas:
Você pode fazer isso com Activity.overridePendingTransition()
. Você pode definir animações de transição simples em um arquivo de recurso XML.
onCreate
função da sua atividade .
Aqui está o código para fazer um bom desvanecimento suave entre duas atividades.
Crie um arquivo chamado fadein.xml
nores/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" />
Crie um arquivo chamado fadeout.xml
nores/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 você quiser desaparecer de Atividade à Atividade B , coloque o seguinte no onCreate()
método para a Atividade B . Antes setContentView()
funciona para mim.
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
Se o desbotamento for muito lento para você, altere android:duration
os arquivos xml acima para algo menor.
overridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);
visualização desses arquivos também pode fornecer dicas sobre como melhorar suas animações personalizadas (por exemplo, tornando o desvanecimento durar mais tempo do que o desvanecimento).
fadein
e fadeout
para fade_in
e fade_out
. Da publicação de Dan J
overridePendingTransition()
logo após ligar finish()
e / ou startActivity()
. Consegui obter um bom desbotamento dessa maneira chamando-o logo após o lançamento da nova atividade.
Uma maneira ainda mais fácil de fazer isso é:
<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>
É isso aí :)
Sim. Você pode dizer ao sistema operacional que tipo de transição você deseja ter para sua atividade.
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().setWindowAnimations(ANIMATION);
...
}
Onde ANIMATION é um número inteiro que se refere a uma animação incorporada no sistema operacional.
criar 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" />
criar 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" />
Em res> valores> styles.xml
<style name="Fade">
<item name="android:windowEnterAnimation">@anim/fadein</item>
<item name="android:windowExitAnimation">@anim/fadeout</item>
</style>
Nas atividades onCreate ()
getWindow().getAttributes().windowAnimations = R.style.Fade;
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Para obter uma lista das animações padrão, consulte: http://developer.android.com/reference/android/R.anim.html
De fato, existe fade_in
e fade_out
para o nível 1 da API e acima.
Substituí minha animação de atividade padrão. Eu testei na api 15 que ele funciona sem problemas. Aqui está a solução que eu uso:
<!-- 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>
Crie uma pasta anim na pasta res e crie esses quatro arquivos de animação:
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>
Você pode baixar meu projeto de amostra .
Isso é tudo... :)
Aqui está o código para fazer uma boa suavização entre duas atividades.
efeito suave da esquerda para a direita
Crie um arquivo chamado slide_in_right.xml e slide_out_right.xml em 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>
efeito suave da direita para a esquerda
Crie um arquivo chamado animation_enter.xml e animation_leave.xml em 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>
Navegue de uma atividade para a segunda Atividade
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. Na volta, pressione o evento ou Navegue da segunda atividade para uma Atividade
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
imediatamente após o startActivity: developer.android.com/reference/android/app/…
Você não pode usar overridePendingTransition no Android 1.5. overridePendingTransistion chegou ao Android 2.0.
Se você passar por isso sem nenhum erro, precisará compilar para o destino (1,5 ou superior) usando as animações comuns (ou você possui) ou precisará compilar para o destino (2,0 ou superior) usando overridePendingTransistion.
Resumo: você não pode usar overridePendingTransistion no Android 1.5 .
Você pode usar as animações integradas no sistema operacional.
Em dispositivos GALAXY:
Você precisa ter certeza de que não o desativou no dispositivo usando Configurações> Opções do desenvolvedor:
Use ActivityCompat.startActivity () funciona API> 21.
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE);
ActivityCompat.startActivity(activity, intent, options.toBundle());
Algumas versões do Android suportam Activity
transições personalizadas e outras não (dispositivos mais antigos). Se você deseja usar transições personalizadas, é uma boa prática verificar se a opção Activity
possuioverridePendingTransition()
método , como nas versões anteriores.
Para saber se o método existe ou não, a API de reflexão pode ser usada. Aqui está o código simples que irá verificar e retornar o método, se existir:
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 então, podemos aplicar nossa própria transição, ou seja, usar este método, se existir:
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();
}
}
Aqui, como exemplo, animações simples de entrada e saída foram usadas para demonstração de transição.
diminuir o zoom da animação
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
respostas relacionadas a seguir: Você pode passar(0, 0)
se não desejar animação alguma.