Cambiar entre vistas con animación de fundido cruzado

He escrito una pequeña actividad que es capaz de cambiar entre dos vistas. Ahora estoy tratando de añadir un poco de animación (fade-in / fade-out efecto). ¿Puede alguien explicarme cómo hacerlo bien?

Mi propio intento de hacer esto funciona un poco buggy (si hago clic en los botones muy rápido, mi aplicación se congela). Utilizo el código que aparece a continuación:

public class WelcomeActivity extends Activity { private boolean isLogin = false; private String KEY_IS_LOGIN = "KEY_IS_LOGIN"; private Animation anim_fadein; private RelativeLayout welcome, login; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); welcome = (RelativeLayout)getLayoutInflater().inflate(R.layout.activity_welcome_menu, null); login = (RelativeLayout)getLayoutInflater().inflate(R.layout.activity_welcome_login, null); anim_fadein = AnimationUtils.loadAnimation(this, R.anim.anim_fadein); if (savedInstanceState != null) isLogin = savedInstanceState.getBoolean(KEY_IS_LOGIN, false); if (isLogin) setContentView(login); else setContentView(welcome); } @Override public void onBackPressed() { if (isLogin) { setContentView(welcome); welcome.startAnimation(anim_fadein); isLogin = false; } else { super.onBackPressed(); } } @Override public void onSaveInstanceState(Bundle outState) { outState.putBoolean(KEY_IS_LOGIN, isLogin); super.onSaveInstanceState(outState); } public void onButton1Click(View v) { setContentView(login); login.startAnimation(anim_fadein); } public void onButtonLoginClick(View v) { Intent i = new Intent(getApplicationContext(), MainActivity.class); startActivity(i); } public void onButtonBackClick(View v) { setContentView(welcome); welcome.startAnimation(anim_fadein); } 

Archivo XML de animación:

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

¡Gracias por adelantado!

La forma en que he hecho esto en el pasado es mediante el uso de la clase ViewFlipper y utilizando las funciones de animación incorporadas que proporciona el paquete.

Aquí hay un ejemplo de cómo hacer esto; En mi experiencia las transiciones han sido muy suaves:

El archivo XML

 <LinearLayout //Ommitted... <ViewFlipper android:id="@+id/[your_id_here]" android:layout_width="fill_parent" android:layout_height="fill_parent"> <RelativeLayout <!--Your first layout XML here...--> </RelativeLayout> <RelativeLayout <!--Your second layout XML here...--> </RelativeLayout> </ViewFlipper> </LinearLayout> 

Tenga en cuenta que no tiene que utilizar diseños relativos, simplemente los usé por razones de claridad.

Implementación de las animaciones

Obtenga una referencia al ViewFlipper en su actividad:

 ViewFlipper v = (ViewFlipper) findViewById(R.id.[your_id]); 

Ajuste las animaciones según sea necesario:

 v.setInAnimation(AnimationUtils.loadAnimation([your_activity_name].this, R.anim.[your_in_animation here])); v.setOutAnimation(AnimationUtils.loadAnimation([your_activity_name].this, R.anim.[your_out_animation here])); 

Tenga en cuenta que puede encontrar algunas animaciones pre-construidas realmente buenas en los archivos de clase de Android ubicados en el siguiente directorio:

 [android-sdks]/samples/android-[VERSION_NUMBER_HERE]/ApiDemos/res/anim 

Recomiendo encarecidamente usar estos si puedes – te ahorrará mucho tiempo.

Ahora, si desea cambiar entre las vistas, utilice los siguientes comandos:

 v.showNext(); v.showPrevious(); 

Puede que tenga que cambiar los archivos de animación ligeramente para asegurarse de que la transición de animaciones correctamente (es decir, hacer una animación de derecha e izquierda se desvanecen).

¡Espero que esto ayude!

Creo que hay 2 principales solución a este problema

  • El primero está usando un ViewFlipper como se sugiere.
  • El otro es ir con la solución descrita aquí .

Prefiero la segunda causa que no necesita el objeto adicional de la visión en su hiearchy de la opinión y segundo usted puede tener su 2 visión toda a través del árbol de la visión. No sólo en un solo lugar definido por la posición del ViewFlipper.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.