2012-01-27 25 views
9

Ho un set di 10 immagini e voglio creare un'animazione in cui incrocio dissolvenza tra di esse. Ho cercato Drawable incorporato per ottenere una cosa del genere, ma senza fortuna da quella parte. C'è AnimationDrawable, che commuta tra le immagini, ma non anima lo switch. C'è il TransitionDrawable, quella dissolvenza incrociata tra due immagini, ma non più di due.Aggiungi transizione a un'animazioneDrawable

Inferno.

Ho cercato una soluzione su Google, ma senza fortuna da quella parte. Quindi sto pensando di implementare il mio drawable per realizzare una cosa del genere. Qualcuno di voi ha qualche indicazione?

Grazie in anticipo.

risposta

15

Non sono sicuro se hai trovato una risposta a questo, ma ho avuto lo stesso problema e ho finito per costruire la mia classe basata su TransitionDrawable.

Usage:

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

imageView.setImageDrawable(ctd); 

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

Il codice per la CyclicTransitionDrawable è available on Github.

+0

Beh non ricordo nemmeno quello che ho fatto :-) Ma la soluzione sembra bello e pulito , quindi segnalo come LA risposta! – Redwarp

+0

C'è un modo per farlo andare solo per un ciclo? – Andy

+0

Attualmente non è possibile limitare il numero di loop. Sebbene possa essere aggiunto, penso che (dalla memoria) si possa usare la classe TransitionDrawable originale per ottenerlo. –

10

Bene. È passato molto tempo e probabilmente hai risolto il problema, ma hai impostato setEnterFaceDuration() per AnimationDrawable. Esempio:

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 questo codice si dispone di una bicicletta facile attraverso immagini 1..N, ognuno rimane 5s (5000ms) con un'animazione fade-in. Ora, quello che faccio è impostare lo sfondo della mia radice RelativeLayout

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

E la classe AnimationStarterThread

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