El gran libro de programación avanzada con Android. José Enrique Amaro Soriano
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.
Finalmente, aplicamos la animación al layout en el fichero main.xml mediante la etiqueta android:layoutAnimation. El fichero Java de nuestra aplicación layoutAnimationActivity no necesita modificarse con respecto al creado por defecto. En la figura 2.9. se muestra el resultado de la animación.
2.10. Animación de un layout en Java
La animación del layout anterior se ha realizado en su totalidad mediante recursos de animaciones almacenados en ficheros xml. La misma animación se puede hacer usando solo código Java. Para ello, hay que seguir los siguientes pasos:
1 Definir la animación que debe aplicarse a cada View, como hicimos anteriormente.
2 Construir un controlador de animaciones, que es un objeto de la clase LayoutAnimationController, pasándole la animación como parámetro.
3 Ejecutar el método setLayoutAnimation del layout que queremos animar, pasándole el controlador anterior como parámetro.
Todo ello se ilustra en la siguiente actividad, que da el mismo resultado que el ejemplo anterior (figura 2.9.).
El layout que se ha utilizado en este ejemplo es el mismo que el del anterior, eliminando la etiqueta android:layoutAnimation y definiendo la ID del layout.
2.11. LayoutAnimationListener
Las animaciones de un layout también admiten la interfaz AnimationListener. Para ello, se invoca el método setLayoutAnimationListener. En el siguiente ejemplo se modifica la actividad anterior para cambiar el TextView final y que experimente una rotación después de la animación del layout. El fichero main.xml no se modifica. En la figura 2.11. se muestra el resultado.
Figura 2.11. Animación de un layout mediante LayoutAnimationListener.
3. ANIMACIÓN DE FOTOGRAMAS
3.1. Animación usando recursos
Una animación de fotogramas consiste en una secuencia de imágenes, cada una de las cuales se muestra en pantalla durante un tiempo determinado. La información de los fotogramas y su duración se puede incluir en un fichero xml, que colocaremos en uno de los directorios res/drawable. En el siguiente ejemplo animaremos una secuencia de seis imágenes jpg, que irán cambiando en intervalos de tres segundos. Las imágenes las copiaremos en el directorio res/drawable-mdpi. En el mismo directorio crearemos el siguiente recurso, un fichero xml con la lista de fotogramas de la animación.
Usaremos el siguiente layout, que consiste en dos botones para activar y detener la animación y un ImageView para contener las imágenes.
Finalmente, en la actividad AnimacionDeFotogramas.java declaramos la animación como un objeto de tipo AnimationDrawable. La animación comienza y se detiene ejecutando sus métodos start y stop. Para definir la animación, primero asignamos el recurso fotogramas_animados.xml al ImageView mediante setBackgroundResource y luego extraemos la animación ejecutando el método getBackground. En la figura 3.1. se muestra el resultado.
Figura 3.1. Animación de fotogramas.
Hay que advertir que el método start de AnimationDrawable no se puede ejecutar directamente en onStart para comenzar la animación automáticamente, porque la aplicación no funcionaría. También hay que controlar el tamaño de las imágenes que se usan como fotogramas. Si son muy grandes o abundantes, se puede producir un error de memoria. Por lo tanto, se debe reducir el tamaño y el número de los fotogramas tanto como sea posible.
3.2. Animación de fotogramas en Java: AnimationDrawable
En el ejemplo anterior hemos animado una serie de fotogramas. La animación se definió como un recurso, en el fichero fotogramas_animados.xml, que se asignó al background de un ImageView mediante setBackgroundResource.
La misma animación la realizaremos ahora en Java sin utilizar el recurso anterior. En Java, una animación de fotogramas es un objeto de la clase AnimationDrawable. Los fotogramas se añaden a esta animación con el método addFrame, que admite dos argumentos: la imagen a dibujar (como un objeto Drawable) y la duración del fotograma en milisegundos. El método setOneShot(boolean) controla si la animación se va a mostrar solo una vez (true) o se va a repetir (false). Para asociar la animación al background, usamos el método setBackgroundDrawable de ImageView. Este sería el programa Java de la animación, usando el layout del ejemplo anterior. El resultado es el mismo que se muestra en la figura 3.1.
3.3. Ajuste de la relación de aspecto
En los ejemplos anteriores hemos asignado una animación