Autore Topic: Animazione su un RelativeLayout contenente ImageView e Linee Canvas  (Letto 861 volte)

Offline GennyAndroid

  • Utente junior
  • **
  • Post: 116
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Play Store ID:
    Gennaro Petito
  • Sistema operativo:
    Windows 7
Scusate il titolo molto lungo.
Veniamo subito al dunque, ho un RelativeLayout nella quale ho inserisco a seconda del livello di difficoltà del quadro varie view in genere ( 10 ImageView ed altrettanti customView che si disegnano da sole tramite l'utilizzo del metodo onDraw() nello specifico ogni customView disegna una linea ).

Bene, ho deciso di applicare un'animazione all'ntero RelativeLayout ma quando mi trovo d'avanti ad un quadro con le caratteristiche sopra citate, spesso va a scatti su un galaxy s II mentre sull'emulatore spesso non riesco proprio a visualizzare l'animazione.

questa è l'animazione:

Codice (Java): [Seleziona]
r1 =new AnimationSet(false);
                //definisco l'animazione di rotazione
                Animation animation1= new RotateAnimation(0, -45,Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
                animation1.setDuration(1500);
                animation1.setFillAfter(true);
                r1.addAnimation(animation1);    
                //definisco l'animazione di translazione
                Animation animation2= new TranslateAnimation(0,display.getWidth(),0,display.getHeight());
                animation2.setDuration(1500);
                animation2.setFillAfter(true);
                r1.addAnimation(animation2);
                //definisco trasparenza
                Animation animation3 = new AlphaAnimation(1.0F, 0.0F);
                animation3.setDuration(1500);
                animation3.setFillAfter(true);
                r1.addAnimation(animation3);   
                //definisco scala
                Animation animation4 = new ScaleAnimation((float)1.0, (float)0.3, (float)1.0, (float)0.3);
                animation4.setDuration(1500);
                animation4.setFillAfter(true);
                r1.addAnimation(animation4);

e questo è il codice che utilizzo per animare il layout:

Codice (Java): [Seleziona]
mainBis.startAnimation(r1);
                       
                        r1.setAnimationListener(new AnimationListener() {                      
                                public void onAnimationStart(Animation animation) {
                                        // TODO Auto-generated method stub                             
                                }                      
                                public void onAnimationRepeat(Animation animation) {
                                        // TODO Auto-generated method stub                             
                                }                      
                                public void onAnimationEnd(Animation animation) {
                                        // TODO Auto-generated method stub
                                        invalidaPunti();
                                        annullaVariabili();
                                        levelCorrente++;
                                        parti();
                                }
                        });    

il logcat evidenzia la mia preoccupazione:

Codice: [Seleziona]
05-08 12:15:57.651: DEBUG/dalvikvm(539): GC_EXTERNAL_ALLOC freed 52K, 52% free 2596K/5379K, external 5500K/6869K, paused 61ms
05-08 12:15:57.771: DEBUG/dalvikvm(539): GC_EXTERNAL_ALLOC freed 4K, 52% free 2591K/5379K, external 5945K/7424K, paused 61ms
05-08 12:15:57.901: DEBUG/dalvikvm(539): GC_EXTERNAL_ALLOC freed <1K, 52% free 2591K/5379K, external 8945K/9297K, paused 53ms
05-08 12:15:58.042: DEBUG/dalvikvm(539): GC_EXTERNAL_ALLOC freed <1K, 52% free 2591K/5379K, external 10445K/10993K, paused 61ms
05-08 12:15:58.161: DEBUG/dalvikvm(539): GC_EXTERNAL_ALLOC freed <1K, 52% free 2592K/5379K, external 11945K/12493K, paused 54ms
05-08 12:15:58.291: DEBUG/dalvikvm(539): GC_EXTERNAL_ALLOC freed <1K, 52% free 2592K/5379K, external 11945K/12493K, paused 63ms
05-08 12:15:58.411: DEBUG/dalvikvm(539): GC_EXTERNAL_ALLOC freed <1K, 52% free 2592K/5379K, external 11945K/12493K, paused 52ms
05-08 12:15:58.551: DEBUG/dalvikvm(539): GC_EXTERNAL_ALLOC freed <1K, 52% free 2592K/5379K, external 11945K/12493K, paused 60ms
05-08 12:15:58.711: DEBUG/dalvikvm(539): GC_EXTERNAL_ALLOC freed <1K, 52% free 2592K/5379K, external 11990K/12493K, paused 51ms
05-08 12:15:58.881: DEBUG/dalvikvm(539): GC_EXTERNAL_ALLOC freed <1K, 52% free 2592K/5379K, external 10475K/11023K, paused 62ms
05-08 12:15:59.041: DEBUG/dalvikvm(539): GC_EXTERNAL_ALLOC freed <1K, 52% free 2592K/5379K, external 10468K/11016K, paused 53ms
05-08 12:15:59.191: DEBUG/dalvikvm(539): GC_EXTERNAL_ALLOC freed <1K, 52% free 2592K/5379K, external 10460K/11008K, paused 64ms
05-08 12:15:59.352: DEBUG/dalvikvm(539): GC_EXTERNAL_ALLOC freed <1K, 52% free 2592K/5379K, external 10460K/11008K, paused 62ms
05-08 12:15:59.511: DEBUG/dalvikvm(539): GC_EXTERNAL_ALLOC freed <1K, 52% free 2592K/5379K, external 10460K/11008K, paused 64ms
05-08 12:15:59.991: DEBUG/dalvikvm(539): GC_EXTERNAL_ALLOC freed 5K, 52% free 2612K/5379K, external 5493K/5560K, paused 51ms
05-08 12:16:00.191: DEBUG/dalvikvm(539): GC_EXTERNAL_ALLOC freed 1K, 52% free 2611K/5379K, external 8493K/8732K, paused 59ms

avete qualche consiglio su come implementare il codice postato?

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:Animazione su un RelativeLayout contenente ImageView e Linee Canvas
« Risposta #1 il: 08 Maggio 2012, 18:28:01 CEST »
0
Non so se sia una soluzione buona ma potresti usare le trasformazioni sui singoli elementi direttamente senza le animazioni e un thread
Odio l'inglese e per un informatico non è il massimo

Offline GennyAndroid

  • Utente junior
  • **
  • Post: 116
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Play Store ID:
    Gennaro Petito
  • Sistema operativo:
    Windows 7
Re:Animazione su un RelativeLayout contenente ImageView e Linee Canvas
« Risposta #2 il: 09 Maggio 2012, 10:19:15 CEST »
0
Non so se sia una soluzione buona ma potresti usare le trasformazioni sui singoli elementi direttamente senza le animazioni e un thread

Ciao ti ringrazio per il consiglio, ma vorrei capire cosa intendi per "trasformazioni"

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:Animazione su un RelativeLayout contenente ImageView e Linee Canvas
« Risposta #3 il: 09 Maggio 2012, 10:46:26 CEST »
0
Le view hanno  metodi per applicare movimenti e rotazioni. Utilizzano i concetti di coordinate omogenee e matrice di trasformazione (http://www.disi.unige.it/person/MagilloP/DISPENSE_IG/trasform.html). Per ruotare una view ad esempio basta usare il suo metodo v.setRotation(angoloInGradi). Ruotera' di default rispetto al suo centro. Con i metodi setPivotX e setPivotY si può modificare il centro della rotazione. Con i metodi setY e setX la si posizione nel layout alle coordinate volute. E' possibile eventualmente accedere e manipolare (metodi getMatrix e setMatrix) direttamente la matrice delle trasformazioni.
Odio l'inglese e per un informatico non è il massimo

Offline GennyAndroid

  • Utente junior
  • **
  • Post: 116
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Play Store ID:
    Gennaro Petito
  • Sistema operativo:
    Windows 7
Re:Animazione su un RelativeLayout contenente ImageView e Linee Canvas
« Risposta #4 il: 09 Maggio 2012, 12:56:17 CEST »
0
Le view hanno  metodi per applicare movimenti e rotazioni. Utilizzano i concetti di coordinate omogenee e matrice di trasformazione (http://www.disi.unige.it/person/MagilloP/DISPENSE_IG/trasform.html). Per ruotare una view ad esempio basta usare il suo metodo v.setRotation(angoloInGradi). Ruotera' di default rispetto al suo centro. Con i metodi setPivotX e setPivotY si può modificare il centro della rotazione. Con i metodi setY e setX la si posizione nel layout alle coordinate volute. E' possibile eventualmente accedere e manipolare (metodi getMatrix e setMatrix) direttamente la matrice delle trasformazioni.

Grazie mille per la tua delucidazione a riguardo, infatti di tali metodi non ne ero proprio a conoscenza spero possano aiutarmi, tengo aperto il topic per quando avrò risolto il problema

Offline GennyAndroid

  • Utente junior
  • **
  • Post: 116
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Play Store ID:
    Gennaro Petito
  • Sistema operativo:
    Windows 7
Re:Animazione su un RelativeLayout contenente ImageView e Linee Canvas
« Risposta #5 il: 09 Maggio 2012, 14:21:57 CEST »
0
ciao purtroppo sono andato ad applicare i metodi da te descritti, ma purtroppo sono applicabili solo con API di livello 11 ed a me interessa una soluzione compatibile con più versioni di android, in ogni caso ti ringrazio per lo sforzo, spero di ricevere ulteriori suggerimenti