Para conseguir que un texto aparezca haciéndose más visible o nítido, animaremos la propiedad alpha, que controla la transparencia o, más correctamente, la ausencia de transparencia. Es decir, la opacidad. Un valor igual a cero indica transparencia total, o invisibilidad. Un valor igual a uno es opacidad total. En la siguiente actividad hacemos aparecer y desaparecer un texto animando la transparencia. En primer lugar, creamos un fichero xml para la animación.
Usamos el mismo layout de los ejemplos anteriores y modificamos ligeramente el programa para obtener la actividad que se detalla a continuación. En la figura 2.5.se muestra el resultado de la animación.
Figura 2.5. Animación haciendo aparecer un texto.
2.6. Series de animaciones
Es posible encadenar varias animaciones en un AnimationSet. Para ello, utilizamos la etiqueta set en un fichero xml. En el siguiente ejemplo encadenamos una aparición, una dilatación, una rotación y una traslación. Por defecto, todas las animaciones comienzan simultáneamente, pero se puede indicar el momento en que debe comenzar cada una mediante la etiqueta startOffset. En este caso, cada animación comienza tres segundos después de la que la precede.
De nuevo, el fichero de la actividad es similar a los anteriores, igual que el layout. En la figura 2.6.se muestra el resultado.
Figura 2.6. Serie de animaciones.
2.7. Animaciones con Java
Las animaciones interpoladas se pueden programar enteramente en Java sin utilizar ficheros de animación xml. Una animación es un objeto de una de las clases AlphaAnimation, ScaleAnimation, RotateAnimation o TraslateAnimation. En el constructor se indican todas las propiedades que hemos visto en xml. Una serie de animaciones es un objeto de la clase AnimationSet. Cada animación individual se añade a la serie mediante serie.addAnimation(animacion). Hay que recordar que la repetición de animaciones con setRepeatMode() no funciona con series.
En el siguiente ejemplo se realiza en Java la misma serie de animaciones de la sección anterior, usando el mismo layout. En la figura 2.7.se muestra el resultado.
Nótese que la posición del centro de escalado, indicada en xml con pivotx=“50%”, se especifica en Java mediante estos dos parámetros:
El primero es una constante que indica que la coordenada es relativa al objeto que se está animando. Dicha coordenada se especifica mediante el siguiente parámetro, que toma un valor entre 0 y 1.
Figura 2.7. Serie de animaciones programadas con Java.
La interfaz AnimationListener permite implementar acciones que se «disparan» cada vez que una animación se repite, o cuando finaliza o se inicia. Esto permite modificar el contenido del objeto View durante la animación o enlazar varias animaciones. Para ello, hay que definir la animación como un «oyente» mediante
La clase que implementa AnimationListener debe definir los métodos onAnimationRepeat, onAnimationEnd, onAnimationStart.
En el siguiente ejemplo, una primera animación hace aparecer un contador 10 veces. Nuestra actividad implementa AnimationListener incrementando el contador cada vez que la animación se repite y, al finalizar esta, ejecuta una segunda animación de escala escribiendo un mensaje final. Usamos el mismo layout de los ejemplos anteriores. En la figura 2.8.se muestra el resultado.
Figura 2.8. Animación usando la interfaz AnimationListener.
2.9. Animación de un layout
Una misma animación puede aplicarse a todo un layout. En este caso, se animarán todos los objetos View del layout en secuencia, cada uno con un retraso. Partiremos de la siguiente animación, una traslación que hace aparecer un elemento por la derecha.
A continuación, definimos la animación del layout mediante layoutAnimation en el siguiente fichero xml. En este caso, especificamos el retraso o delay en la animación de cada elemento, expresado como una fracción de la duración de la animación, y el orden o animationOrder en el que se aplicarán las sucesivas animaciones, que puede ser normal, reverse o random. Finalmente, el fichero de la animación se especifica como el recurso anim/animacion.
Figura 2.9. Animación de un layout mediante LayoutAnimation.
Читать дальше