2012-09-26 14 views
6

Ho un ViewFlipper impostato su Auto-flip ogni 5 secondi. Tralasciando alcuni dei dettagli, sembra che questa e funziona bene:Come fermare Android ViewFlipper dal loop?

ViewFlipper flipper = (ViewFlipper) findViewById(R.id.myflipperid); 

flipper.setFlipInterval(5000);        
flipper.setInAnimation(inFromRightAnimation()); 
flipper.setOutAnimation(outToLeftAnimation()); 

flipper.startFlipping(); 

Tuttavia, ho un caso in cui voglio l'auto-flipping per fermare all'ultimo vista, piuttosto che loop intorno per ricominciare . Non sembra che ViewFlipper o una delle classi ereditate da abbia un metodo di controllo in loop.

Come è possibile che ViewFlipper interrompa il ciclo delle sue viste secondarie quando raggiunge l'ultimo?

Nota: la risposta data here non si applica al mio caso, in quanto ho bisogno di catturare ViewFlipper alla fine del suo elenco, vale a dire, senza dipendere dall'input dell'utente. Grazie.

risposta

6

Non ho provato questo da solo, ma spero che questo possa essere d'aiuto.

Innanzitutto, prova ad ascoltare gli eventi di flip del tuo viewflipper. Poiché si sta utilizzando un'animazione. È possibile utilizzare la soluzione postata qui: https://stackoverflow.com/a/3813179/1594522

Quindi, onAnimationEnd(), è possibile verificare se il viewflipper si trova nell'ultima visualizzazione secondaria. Se è già nella sua ultima vista figlia, chiama flipper.stopFlipping().

Spero che questo aiuti! :)

+1

Sì, questo è esattamente quello che ho fatto ieri. Mi hai battuto nel pubblicare una risposta, quindi ti darò il segno di spunta! La mia soluzione attuale è pubblicata qui sotto. – gcl1

0

Basta avere la dimensione della lista, e poi nella condizione di se, dicono

flipper.stopFlipping() 

Spero che funziona in questo modo.

8

Ecco la soluzione che ho usato. Come suggerito here, il trucco consiste nell'ascoltare la fine dell'evento di animazione, quindi verificare se il flipper si trova nell'ultima visualizzazione.

flipper.getInAnimation().setAnimationListener(new Animation.AnimationListener() { 

    public void onAnimationStart(Animation animation) {} 
    public void onAnimationRepeat(Animation animation) {} 
    public void onAnimationEnd(Animation animation) { 

     int displayedChild = flipper.getDisplayedChild(); 
     int childCount = flipper.getChildCount(); 

     if (displayedChild == childCount - 1) { 
      flipper.stopFlipping(); 
     } 
    } 
}); 

Grazie per le vostre risposte.

+0

Che cos'è "flipperWall" nel tuo esempio? –

+0

Mi dispiace, ho omesso la dichiarazione. In questo esempio, flipperWall è solo un flipper di viste, come questo: ViewFlipper flipperWall ;. Avrai anche bisogno di inizializzarlo da un file XML, usando findViewById(), o facendolo a livello di programmazione. In bocca al lupo! – gcl1

+0

Ho modificato la risposta. Vedi se ha più senso ora. –