Threads y animaciones en Android

En la entrada anterior vimos cómo convertir un gif animado en una animación para Android. Lo siguiente que queremos hacer es usar esa animación en una aplicación.

Es un problema conocido que si se llama al método AnimationDrawable.start() desde métodos del Activity como en Activity.onCreate(), la animación no se moverá, y solo se verá la primera imagen de la misma. No habrá ningún error, no habrá ningún problema, y sin embargo la animación no se moverá.

La solución la aporta un usuario en la misma hebra del problema, y viene a decir que hay que crear una clase Starter que implemente la interfaz Runnable y crear un objeto de este tipo dentro del método ImageView.post(). De este modo el método run() de la clase Starter se ejecutará en la misma hebra que el método del Activity (la hebra de interfaz del usuario – UI Thread) y además después de que nuestro ImageView haya sido correctamente inicializado y mostrado en pantalla.

Esta primera parte iría en el método del Activity donde queremos asignar e iniciar la animación.

1
2
3
4
5
// --- %< ---
imageView.setBackgroundResource(R.drawable.throbber);
AnimationDrawable d = (AnimationDrawable)imageView.getBackground();
imageView.post(new Starter(d));
// --- %< ---

Y por otro lado tendríamos que crear una clase Starter() como la siguiente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* Starts the animation drawable passed to the constructor.
*/
class Starter implements Runnable {
    private AnimationDrawable animationDrawable = null;
 
    public Starter(AnimationDrawable animationDrawable) {
        this.animationDrawable = animationDrawable;
    }
 
    public void run() {
        this.animationDrawable.start();
    }
}

Etiquetas: , ,

Archivado en:Android

3 comentarios en “Threads y animaciones en Android”