Autore Topic: Quando "finisce" un'AnimationDrawable  (Letto 977 volte)

vincenzodicicco

  • Visitatore
Quando "finisce" un'AnimationDrawable
« il: 31 Agosto 2010, 19:51:01 CEST »
0
Salve a tutti mi trovo davanti un problema che non riesco proprio a risolvere.Ho un AnimationDrawable che funziona perfettamente ma ho bisogno di sapere quando l'animazione è completata, ma non ho trovato nessun metodo che fa al caso mio mi basterebbe anche sapere a che frame è l'animazine e magari riesco a tirare fuori qualcosa.Una seconda soluzione che mi è passata per la mente era di utilizzare un timer proprio della durata dell'animazione, ma non so quanto è sicura come procedura.Grazie a tutti in aticipo  :-)

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +203
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Quando "finisce" un'AnimationDrawable
« Risposta #1 il: 31 Agosto 2010, 20:08:27 CEST »
+3
guardando velocemente la doc, non ho trovato dei listener particolari...

non ho provato, ma questo dovrebbe funzinoare:
Codice (Java): [Seleziona]
                 animation.start();


                Thread t=new Thread(new Runnable() {
                       
                        @Override
                        public void run() {
                                while(animaton.isRunning()){
                                       
                                }


                                //qui l'animazione ha finito
                               
                        }
                });
                t.start();

vincenzodicicco

  • Visitatore
Re:Quando "finisce" un'AnimationDrawable
« Risposta #2 il: 31 Agosto 2010, 20:27:11 CEST »
0
No Qlimax, purtroppo no!! Ho notato che il metodo isRunning() è alquanto anomalo, rimane sempre true nonstante l'animazione sembra finita, aggiungo che all'interno del xml dell'animazione ho impostato  il parametro "oneshot" a true cosi che l'animazione non è all'interno di un loop infito ma si ferma appena arriva all'ultimo frame, dimmi che hai qualche altra idea  :D :D

vincenzodicicco

  • Visitatore
Re:Quando "finisce" un'AnimationDrawable
« Risposta #3 il: 31 Agosto 2010, 20:48:38 CEST »
0
Ho buttato un po di codice per dare vita ad un idea che mi era passata per la mente, il codice funziona ma vorrei un vostro parere, non è troppo "pesante"?:
Codice (Java): [Seleziona]
        final AnimationDrawable anm_griglia = (AnimationDrawable) img_griglia.getBackground();
        anm_griglia.start();
        Thread t = new Thread(new Runnable() {
                        public void run() {
                                int index = 0;
                                boolean loop=true,temp=true;
                                Drawable uno = null,due=null;
                                while(loop){
                                        if(index == anm_griglia.getNumberOfFrames()){
                                                loop=false;
                                        }else{
                                                if(temp){
                                                        uno=anm_griglia.getCurrent();
                                                        temp=false;
                                                }else{
                                                        due=anm_griglia.getCurrent();
                                                        temp=true;
                                                }
                                                if(uno !=due){
                                                        index++;
                                                }
                                        }
                                }
                        Log.v("FINITO","test"); //QUI L'ANIMAZIONE E' FINITA
                        }
                });
        t.start();
Codice non ottimizzato, attendo qualcosa di più performante io credo che usare il metodo che ho realizzato sia davvero impensabile, per chi non vuole mettersi a leggere il codice l'algoritmo in un ciclo controlla che la variabile index sia uguale al numero massimo di frame che contiene l'animazione, se ciò è vero si conclude il ciclo, caso contrario prendo la Drawable del frame precedente e quella attuale e li confronto se sono diverse vuol dire che il cambiamento di frame è avvenuto correttamente e quindi aumento la variabile index, caso contrario vorrà dire che ancora il passaggio di frame non è avvenuto e ripeto il ciclo.

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +203
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Quando "finisce" un'AnimationDrawable
« Risposta #4 il: 31 Agosto 2010, 21:17:58 CEST »
0
ammettendo che la tua animazione ha 10 frame potresti fare cosi (prova):
Codice (Java): [Seleziona]
Thread t = new Thread(new Runnable() {
                        public void run() {
                               
                                while(anm_griglia.getFrame(9)!=anm_griglia.getCurrent()){
                                       
                                }
                           
                        //fine
                        }
                });
        t.start();


certo che questo AnimationDrawable l han fatto un po con i piedi...

http://www.google.com/codesearch/p?hl=it#uX1GffpyOZk/graphics/java/android/graphics/drawable/AnimationDrawable.java&q=AnimationDrawable&sa=N&cd=1&ct=rc

linea 128

Codice (Java): [Seleziona]
    public boolean isRunning() {
        return mCurFrame > -1;
    }

praticamente da quando parte è sempre true...

vincenzodicicco

  • Visitatore
Re:Quando "finisce" un'AnimationDrawable
« Risposta #5 il: 01 Settembre 2010, 01:47:51 CEST »
0
ammettendo che la tua animazione ha 10 frame potresti fare cosi (prova):
Codice (Java): [Seleziona]
Thread t = new Thread(new Runnable() {
                        public void run() {
                               
                                while(anm_griglia.getFrame(9)!=anm_griglia.getCurrent()){
                                       
                                }
                           
                        //fine
                        }
                });
        t.start();
Funziona perfettamente grazie di nuovo Qlimax!! :-) :-)
Citazione
certo che questo AnimationDrawable l han fatto un po con i piedi...
Come non darti ragione pensa che ero più che sicuro di avere un metodo che mi ritornasse il numero del frame corrente, ma si parla solo di Drawable, chissà perchè così abbandonato  :-\