2012-01-27 10 views
9

Tengo un conjunto de 10 imágenes, y quiero crear una animación donde cruce el fundido entre ellas. He estado buscando Drawable incorporado para lograr tal cosa, pero no tuve suerte en esa parte. Está el AnimationDrawable, que alterna entre imágenes, pero no anima el cambio. Está el TransitionDrawable, que se desvanece entre dos imágenes, pero no más de dos.Agregar la transición a una AnimationDrawable

Infierno.

Busqué alguna solución en Google, pero no tuve suerte en esa parte. Así que estoy pensando en implementar mi propio dibujo para lograr tal cosa. ¿Alguno de ustedes tiene alguna sugerencia?

Gracias de antemano.

Respuesta

15

No estoy seguro de si encontraste una respuesta a esto, pero tuve el mismo problema y terminé construyendo mi propia clase basada en TransitionDrawable.

Uso:

CyclicTransitionDrawable ctd = new CyclicTransitionDrawable(new Drawable[] { 
    drawable1, 
    drawable2, 
    drawable3, 
    ... 
}); 

imageView.setImageDrawable(ctd); 

ctd.startTransition(1000, 3000) // 1 second transition, 3 second pause between transitions. 

El código para el CyclicTransitionDrawable es available on Github.

+0

Bueno, yo ni siquiera recuerdo lo que hice :-) Pero su solución parece agradable y limpio , así que marquémoslo como LA RESPUESTA! – Redwarp

+0

¿Hay alguna manera de hacerlo solo por un ciclo? – Andy

+0

Actualmente no hay forma de limitar el número de bucles. Aunque podría agregarse, creo (desde la memoria) puede usar la clase original TransitionDrawable para lograr eso. –

10

Bien. Ha pasado mucho tiempo, y es probable que haya solucionado el problema, pero tiene setEnterFaceDuration() para AnimationDrawable. Ejemplo:

mBackgroundAnimation = new AnimationDrawable(); 
mBackgroundAnimation.addFrame(getResources().getDrawable(R.drawable.background1), 5000); 
// ... rest of the frames 
mBackgroundAnimation.addFrame(getResources().getDrawable(R.drawable.background6), 5000); 
mBackgroundAnimation.setEnterFadeDuration(1000); 
mBackgroundAnimation.setOneShot(false); 

Con este código tiene una bicicleta fácil a través de imágenes 1..n, cada uno sigue siendo 5s (5000 ms) con una animación de fundido de entrada. Ahora, lo que hago es configurar el fondo de mi raíz RelativeLayout

mLayoutRoot.setBackground(mBackgroundAnimation); 
mLayoutRoot.post(new AnimationStarterThread()); 

Y la clase AnimationStarterThread

private class AnimationStarterThread implements Runnable { 
    public void run() { 
     if(mBackgroundAnimation != null) 
      mBackgroundAnimation.start(); 
    } 
} 
Cuestiones relacionadas