Con la nueva API de animación que se introdujo en Android 3.0 (Honeycomb) es muy sencillo crear tales animaciones.
Deslizando un View
down por una distancia:
view.animate().translationY(distance);
Más tarde, puede deslizar la parte View
posterior a su posición original de esta manera:
view.animate().translationY(0);
También puede combinar fácilmente múltiples animaciones. La siguiente animación se deslizará View
hacia abajo por su altura y se desvanecerá al mismo tiempo:
// Prepare the View for the animation
view.setVisibility(View.VISIBLE);
view.setAlpha(0.0f);
// Start the animation
view.animate()
.translationY(view.getHeight())
.alpha(1.0f)
.setListener(null);
Luego puede desvanecer el View
respaldo y deslizarlo nuevamente a su posición original. También configuramos un AnimatorListener
modo para que podamos configurar la visibilidad de la parte View
posterior GONE
una vez que finaliza la animación:
view.animate()
.translationY(0)
.alpha(0.0f)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
view.setVisibility(View.GONE);
}
});
View
cuando su visibilidad está configuradaView.GONE
? Si establece su visibilidad en cualquier cosa además deView.VISIBLE
esoView
, no será visible. No entiendo lo que preguntas. Si desea que su animación sea visible, no configure la visibilidad deView
aView.GONE
.onAnimationEnd
se llama cada vez que para una animación múltiples que ocurren, lo que significa queonAnimationEnd
se llama también cuando la vista consigue muestra, que establece su visibilidad a Ido, etc.Estaba teniendo problemas para entender y aplicar la respuesta aceptada. Necesitaba un poco más de contexto. Ahora que lo he descubierto, aquí hay un ejemplo completo:
MainActivity.java
activity_mail.xml
Notas
INVISIBLE
.INVISIBLE
. Sin embargo, si no está animando completamente fuera de la pantalla, puede agregar una animación alfa y establecer la visibilidad con unAnimatorListenerAdapter
.fuente
.setVisibility(View.INVISIBLE);
la función deslizar hacia arriba no funcionará como se esperaba visualmente.Translate Animation
mueve la vista. Si desea animar la vista al igual que su escala por sí mismo a continuación, utilizarScaleAnimation anim = new ScaleAnimation(1, 1, 0, 1)
Ahora las animaciones de cambio de visibilidad deben hacerse a través del
Transition API
paquete de soporte disponible (androidx). Simplemente llame al método TransitionManager.beginDelayedTransition con la transición Slide y luego cambie la visibilidad de la vista.activity_main.xml
Verifique esta respuesta con otros ejemplos de transición predeterminados y personalizados.
fuente
minSdkVersion 21
androidx
paquete. Funciona bien en pre 21 api.La solución más fácil: configurar
android:animateLayoutChanges="true"
en el contenedor que contiene sus vistas.Para ponerlo en algún contexto: si tiene un diseño como el siguiente, todos los cambios de visibilidad de las vistas en este contenedor se animarán automáticamente.
Puede encontrar más detalles sobre esto en Animating Layout Changes - Desarrollador de Android
fuente
Puede iniciar el correcto
Animation
cuando la visibilidad de losLinearLayout
cambios crea una nueva subclase deLinearLayout
y anularsetVisibility()
para iniciar elAnimations
. Considera algo como esto:fuente
View
responsable de sus propias animaciones, que NUNCA es lo que quieres. Imagine que desea animar de maneraView
diferente en otra parte de su aplicación. ¿Que haces entonces? ¿Agregar una bandera para no animar automáticamente la visibilidad? SubclaseView
y anularsetVisibility()
para eliminar la animación? ¿O peor aún implementarsetVisibility()
con otra animación? Simplemente se pone más y más feo a partir de ahí. No use esta "solución".Kotlin
Basado en la respuesta de Suragch , aquí hay una manera elegante usando la extensión Ver:
Y luego, donde quieras usarlo, solo necesitas
myView.slideUp()
omyView.slideDown()
fuente
fuente
setAlpha
?puede deslizar hacia arriba y hacia abajo cualquier vista o diseño utilizando el siguiente código en la aplicación de Android
fuente
Usa esta clase:
fuente
Usando ObjectAnimator
fuente
0.toFloat()
también puede ser0f
Tenía una vitrina en la que la altura de mi vista todavía era
zero
tan ...fuente
Aquí está mi solución. Simplemente obtenga una referencia a su punto de vista y llame a este método:
No es necesario hacer nada más =)
fuente
La respuesta de Suragch en Kotlin. Esto funcionó para mí.
}
fuente
Puede usar las tres líneas de código simples para mostrar la animación ...
fuente
Con las extensiones de Kotlin puedes usar esto:
Ejemplo para la extensión:
fuente
Una de las formas simples:
fuente