2012-02-05 8 views
18

Actualmente estoy trabajando en una aplicación de Android y estoy teniendo algunos problemas con mi actividad splash. Quiero que mi actividad principal se desvanezca desde mi actividad de bienvenida, no desde una pantalla negra. Tanto mi splash como las actividades principales utilizan la misma imagen de fondo, así que si hago un combo fade_in/fade_out, se ve raro ya que el fondo se atenúa un poco durante la transición.Fade in Actividad de actividad anterior en Android

La idea aquí es que tengo versiones de mi logotipo: normal y brillante. Quiero que mi actividad principal se desvanezca para que mi logo brillante tome mi logo normal causando un pequeño efecto de "encender". El siguiente código se desvanece desde una pantalla negra, lo cual no es ideal.

/** 
* Pause Activity 
*/ 
@Override 
protected void onPause() 
{ 
    super.onPause(); 
    finish(); 
    overridePendingTransition(android.R.anim.fade_in, 0); 
} 

EDIT:

Creando mi propia animación fade_out para retener el nivel 1.0 alpha (de 1,0 a 1,0) y añadiendo android:fillAfter="true" a mi set de animación de bienvenida fija el problema.

Respuesta

36

Se trata del orden de las cosas. Aquí está un ejemplo que se desvanece en la siguiente actividad después de 3 segundos:

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

    //Create an intent that will start the main activity. 
    Intent mainIntent = new Intent(SplashActivity.this, MainMenuActivity.class); 
    SplashActivity.this.startActivity(mainIntent); 

    //Finish splash activity so user cant go back to it. 
    SplashActivity.this.finish(); 

    //Apply splash exit (fade out) and main entry (fade in) animation transitions. 
    overridePendingTransition(R.anim.mainfadein, R.anim.splashfadeout); 
    } 
}, 3000); 

Tenga en cuenta que aquí hay unas dos animaciones aparecen y se desvanecen.

mainfadein.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="700" /> 

splashfadeout.xml

<?xml version="1.0" encoding="utf-8"?> 
<alpha xmlns:android="http://schemas.android.com/apk/res/android" 
     android:interpolator="@android:anim/decelerate_interpolator" 
     android:zAdjustment="top" 
     android:fromAlpha="1.0" 
     android:toAlpha="0.0" 
     android:duration="700" /> 
+0

Hrm ... Esto tiene el mismo problema que mi código actual en la que se va a una pantalla en negro antes de desaparecer en caso de que omita el fade_out o se vea un poco inestable si lo dejo. Intenté implementar mi propio fade_out que transiciones de 1.0 alfa a 1.0 alfa pero el registro original o todavía se desplazó antes de que el nuevo se desvaneciera. El objetivo aquí es "sobreescribir" la actividad de salpicadura con la actividad principal para que parezca que el logotipo comienza a brillar cuando aparecen las otras vistas. – Karai17

+0

Aha! ¡Lo arreglé! – Karai17

+2

Me alegra oír, también agregué el xml para futuros visitantes. Entonces, si en spalsh fade out establecemos android: fillAfter = "true" y alpha de 1.0.to 1.0 obtenemos el llamado efecto cross-fade. ¡Bueno saber! – Lumis

23

me gustaría recomendar en contra de un fundido cruzado clásico, sino más bien mostrar la nueva actividad sin una animación y simplemente se desvanecen a cabo la actividad actual. Esto parece & se siente mucho más limpio y resuelve algunos problemas menores en los que puede ver la aplicación de inicio/subyacente cuando abre la aplicación desde el fondo mientras se inicia la animación.

my_splash_fade_out.xml

<?xml version="1.0" encoding="utf-8"?> 

<alpha 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="750" 
    android:fromAlpha="1.0" 
    android:interpolator="@android:interpolator/accelerate_cubic" 
    android:startOffset="250" 
    android:toAlpha="0.0" 
    android:zAdjustment="top" /> 

estoy añadiendo un startOffset aquí para dar la actividad de nueva creación un poco fuera una ventaja, ya que es bastante pesado.

MySplashActivity.java

... 
startActivity(...); 
finish(); 
overridePendingTransition(0, R.anim.screen_splash_fade_out); 

de vista previa

Preview animation

+0

Me gusta mucho mejor, ¡gracias! – George

+0

agradable y conciso. –

Cuestiones relacionadas