Respuestas:
Puedes hacer esto con Activity.overridePendingTransition()
. Puede definir animaciones de transición simples en un archivo de recursos XML.
onCreate
función de tu Actividad .
Aquí está el código para hacer un desvanecimiento suave y agradable entre dos actividades.
Crear un archivo llamado fadein.xml
enres/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" />
Crear un archivo llamado fadeout.xml
enres/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" />
Si desea hacer desaparecer de la Actividad A a la actividad B , ponga la siguiente en el onCreate()
método para la actividad B . Antes setContentView()
funciona para mí.
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
Si los desvanecimientos son demasiado lentos para usted, cambie android:duration
los archivos xml anteriores a algo más pequeño.
overridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);
visualización de esos archivos también puede darle pistas sobre cómo mejorar sus animaciones personalizadas (por ejemplo, haciendo que el desvanecimiento se prolongue más que el desvanecimiento).
fadein
y fadeout
para fade_in
y fade_out
. Del post de Dan J
overridePendingTransition()
inmediatamente después de llamar finish()
y / o startActivity()
. Pude obtener un buen desvanecimiento de esta manera llamándolo justo después de lanzar la nueva Actividad.
Una forma incluso fácil de hacerlo es:
<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>
Eso es :)
Si. Puede decirle al sistema operativo qué tipo de transición desea tener para su actividad.
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().setWindowAnimations(ANIMATION);
...
}
Donde ANIMATION es un número entero que se refiere a una animación integrada en el sistema operativo.
create 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" />
create 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" />
En res> values> styles.xml
<style name="Fade">
<item name="android:windowEnterAnimation">@anim/fadein</item>
<item name="android:windowExitAnimation">@anim/fadeout</item>
</style>
En actividades onCreate ()
getWindow().getAttributes().windowAnimations = R.style.Fade;
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
Para obtener una lista de animaciones predeterminadas, consulte: http://developer.android.com/reference/android/R.anim.html
Hay, de hecho, fade_in
y fade_out
para el nivel de API de 1 en adelante.
Sobreescribo mi animación de actividad predeterminada. Lo pruebo en la API 15 para que funcione sin problemas. Aquí está la solución que 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>
Cree la carpeta anim bajo la carpeta res y luego cree estos cuatro archivos de animación:
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>
Puedes descargar mi proyecto de muestra .
Eso es todo... :)
Aquí está el código para hacer una buena transición entre dos actividades.
efecto suave de izquierda a derecha
Cree un archivo llamado slide_in_right.xml y slide_out_right.xml en 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>
efecto suave de derecha a izquierda
Cree un archivo llamado animation_enter.xml y animation_leave.xml en 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>
Navega de una actividad a la segunda Actividad
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.En el evento de retroceso de prensa o navegue de la segunda actividad a una
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
inmediatamente después de startActivity: developer.android.com/reference/android/app/…
No puede usar overridePendingTransition en Android 1.5. overridePendingTransistion llegó a Android 2.0.
Si va a pasar por esto sin ningún error, debe compilar para el objetivo (1.5 o superior) utilizando las animaciones ordinarias (o las suyas) o debe compilar para el objetivo (2.0 o superior) utilizando overridePendingTransistion.
Resumen: no puede usar overridePendingTransistion en Android 1.5 .
Sin embargo, puede utilizar las animaciones integradas en el sistema operativo.
EN dispositivos GALAXY:
Debe asegurarse de no haberlo apagado en el dispositivo usando Configuración> Opciones de desarrollador:
Use ActivityCompat.startActivity () funciona API> 21.
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE);
ActivityCompat.startActivity(activity, intent, options.toBundle());
Algunas versiones de Android admiten Activity
transiciones personalizadas y otras no (dispositivos más antiguos). Si desea utilizar transiciones personalizadas, es una buena práctica verificar si Activity
tiene el overridePendingTransition()
método, ya que en versiones anteriores no lo tiene.
Para saber si el método existe o no, se puede utilizar la API de reflexión. Aquí está el código simple que verificará y devolverá el método si existe:
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 */
}
Y luego, podemos aplicar nuestra propia transición, es decir, usar este método si existe:
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();
}
}
Aquí, como ejemplo, se usaron animaciones simples de entrada y salida para la demostración de transición.
alejar la animación
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
respuestas relacionadas a continuación: Puede aprobar(0, 0)
si no desea ninguna animación.