Como aplicar animação de slides entre duas atividades no Android?

Quero alcançar um efeito deslizante da esquerda para a direita quando passo de uma actividade para outra. Para isso estou usando o seguinte código, mas não estou obtendo quaisquer resultados. Por favor, corrija-me.

em java ambos os ficheiros:

super.onCreate(savedInstanceState);
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
setContentView(R.layout.main);

dois ficheiros na pasta res / anim:

Fadein.xml

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

Fadeout.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000"
    android:fromAlpha="0.0"
    android:interpolator="@android:anim/slide_in_left"
    android:toAlpha="1.0" >
</alpha>
Author: TofferJ, 2012-04-20

6 answers

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splashscreen);

         new Handler().postDelayed(new Runnable() {
             public void run() {

                     /* Create an intent that will start the main activity. */
                     Intent mainIntent = new Intent(SplashScreen.this,
                             ConnectedActivity.class);
                     mainIntent.putExtra("id", "1");

                     //SplashScreen.this.startActivity(mainIntent);
                     startActivity(mainIntent);
                     /* Finish splash activity so user cant go back to it. */
                     SplashScreen.this.finish();

                     /* Apply our splash exit (fade out) and main
                        entry (fade in) animation transitions. */
                     overridePendingTransition(R.anim.mainfadein,R.anim.splashfadeout);
             }
     }, SPLASH_DISPLAY_TIME);   
    }
 28
Author: MAC, 2012-04-20 09:31:19

Adicione estes dois ficheiros na pasta res/anim.

Deslizante.xml

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

Deslizante.xml

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

E escreva o seguinte código no método de oncreato() da próxima actividade que você passa através da intenção.

          overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
 134
Author: Born To Win, 2015-01-30 16:35:48

Você pode sobrepor a sua animação por omissão e ela funciona melhor do que a transição dependente. Eu uso esta solução que funciona para cada versão android. Basta copiar o colar 4 ficheiros e adicionar um estilo de 4 linhas como em baixo:

Crie uma " animação personalizada "e adicione isto ao seu tema de base por"estilo windowanimation".

<!-- 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>

Em seguida, criar uma pasta anim sob a pasta res e, em seguida, criar estes quatro arquivos de animação em anim pasta:

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>

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

Se enfrentares algum problema, podes descarregar o meu projecto de amostra do github .

Obrigado.
 39
Author: Shohan Ahmed Sijan, 2017-02-27 10:27:56

Podes usar overridePendingTransition em startActivity em vez de onCreate. Pelo menos, por mim tudo bem!

Veja um exemplo completo aqui . É incluindo uma animação (reversa) onBackPressed, assim, ao retornar à atividade anterior! No seu exemplo específico (fade-in e-out) isso pode ser desnecessário.

 1
Author: P Kuijpers, 2017-06-10 13:15:57

A animação por 'Slide' pode ser aplicada às transições de actividade, invocando a transição dependente de 'overriding' e passando os recursos de animação para as actividades de entrada e saída.

As animações de slides podem ser deslizadas para a direita, deslizar para a esquerda, deslizar para cima e deslizar para baixo.

Deslizar para cima

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator">
    <scale
        android:duration="800"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:toXScale="1.0"
        android:toYScale="0.0" />
</set>

Deslizar para baixo

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator">
    <scale
        android:duration="800"
        android:fromXScale="1.0"
        android:fromYScale="0.0"
        android:toXScale="1.0"
        android:toYScale="1.0" />
</set>

Transição Super dependente(R. anim.slide_down, R. anim.slide_up);

Ver animação de transição de actividade exemplos para mais transição de actividade exemplo.

 0
Author: Arnav Rao, 2018-04-01 03:59:37

Deslizar para cima / para baixo com animação alfa com algumas notas

enter image description here

Deslizante.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@integer/activity_transition_time"
    >
    <translate
        android:fromYDelta="100%p"
        android:toYDelta="0"/>
    <alpha
        android:fromAlpha="0.5"
        android:toAlpha="1"/>
</set>

Slide_down.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@integer/activity_transition_time"
    >
    <translate
        android:fromYDelta="0"
        android:toYDelta="100%p"/>
    <alpha
        android:fromAlpha="1"
        android:toAlpha="0.5"/>
</set>

Reanimação não.xml

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

Primeira Actividade

startActivity(new Intent(this, SecondActivity.class));
overridePendingTransition(R.anim.slide_up,  R.anim.no_animation); // remember to put it after startActivity, if you put it to above, animation will not working
// document say if we don't want animation we can put 0. However, if we put 0 instead of R.anim.no_animation, the exist activity will become black when animate

Segunda Actividade

finish();
overridePendingTransition(R.anim.no_animation, R.anim.slide_down);

Concluído

MAIS
Eu tento fazer a animação slide como a animação iOS quando apresentar um modelo de vista (como este https://www.youtube.com/watch?v=deZobvh2064 mas falhou.

Olhando para a animação actual do iOS irá ver: a animação a partir de baixo com o alpha (cerca de 50%), em seguida, vai muito rápido e mais lento, o tempo de animação é cerca de > 500ms (eu uso Ferramentas de vídeo aparadas para contar o tempo de animação https://www.kapwing.com/trim-video então não pode exactamente 100%)

Depois tento candidatar-me ao android.
Para fazer Alfa eu usar <alpha> e sucesso.
Para fazer animação comece mais rápido do que mais lento que eu uso android:interpolator="a decelerate interpolator" mas quase falhou.

Existem 3 predefinições decelerate interpolator no Android
@android:interpolator/decelerate_quad -> factor = 1
@android:interpolator/decelerate_cubic -> factor = 1.5
@android:interpolator/decelerate_quint _> factor = 2, 5
(factor mais elevado a animação começa mais rápido do início e mais lento no fim)
Aqui está um bom tutorial http://cogitolearning.co.uk/2013/10/android-animations-tutorial-5-more-on-interpolators por entendê-lo.

Eu tentei 3 acima não consigo alcançar como iOS, a animação não podemos começar mais rápido como os iOS. Em seguida, crio um factor de desaceleração personalizado interpolator wiht = 3 Como

<?xml version="1.0" encoding="utf-8"?>
<decelerateInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:factor="3" />

E eu aumento o tempo de duração de 500 -> 750. It working well (very similar to iOS). No entanto, ele só funciona bem em algum dispositivo, em algum dispositivo a animação é bastante lenta. Mais tarde, eu sei que a animação pode ser diferente em diferentes dispositivos (eg: algum dispositivo vai mais rápido e algum dispositivo vai mais lento) para que eu não possa torná-lo a animação semelhante em todos os dispositivos Android. Portanto ... não utilize interpolator. Não sei se os meus testes são 100% ou não, mas espero que esta experiência ajude.

 0
Author: Phan Van Linh, 2018-10-05 04:04:46