Autore Topic: Problema Rotazione RelativeLayout  (Letto 657 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
Problema Rotazione RelativeLayout
« il: 12 Maggio 2012, 17:11:28 CEST »
0
Salve raga, e da giorni che sbatto la testa sullo stesso problema è questo mi deprime non poco.

tutto iniziò quando decisi di far ruotare alcuni elementi del mio layout, successivamente alla creazione dell'animazione ho notato che questa produceva l'effetto desiderato solo se veniva applicata a tutti gli elementi in contemporanea, allora decisi di inserire tali elementi tutti in un RelativeLayout applicando la rotazione al solo layout.

Riesco finalmente ad ottenere il risultato desiderato, ma dopo un pò mi accorgo che qualcosa non va, in pratica andando a leggere il LogCat mi accorgo che il GarbageCollector viene invocato troppe volte proprio in concomitanza con lo start dell'animazione, ( questo non succedeva quando applicavo l'animazione alla singola view )

ecco il logcat:

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

Se qualcuno sapesse spiegarmi perchè viene invocato il garbage, e sa darmi una soluzione a come applicare l'animazione all'intero layout mi risolverebbe sin da subito il problema.

Comunque dato che non sapevo darmi una spiegazione, ho deciso di cambiare strada, pensando di creare una ImageView costruita grazie al metodo getDrawingCache() del layout, facendo roteare solo l'imageView.

Ma qui incappo in un altro problema, ossia se provo catturare l'immagine del layout con il metodo getDrawingCache() nella riga successiva alla creazione del RelativeLayout, getDrawingCache() da come risultato null, se invece aspetto meno di mezzo secondo tutto funziona.

Allora volevo chiedervi come posso fare per chiamare il metodo getDrawingCache() non appena il RelativeLayout si disegna?

Ho bisogno di un qualche Listener che ascolti quando il layout si disegna...le ho provate tutte ma nn so come fare vi prego aiutatemi
« Ultima modifica: 12 Maggio 2012, 17:13:37 CEST da GennyAndroid »

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:Problema Rotazione RelativeLayout
« Risposta #1 il: 12 Maggio 2012, 17:24:46 CEST »
0
non mi viene a mente nessun costrutto che mi dia la possibilità di fare questo:

FINCHE' (getDrawingCache() == null){
       NON FARE NIENTE !
}DOPO DI CHE{
       PROCEDI
}

Offline Eu4ia

  • Utente junior
  • **
  • Post: 93
  • Respect: +16
    • Mostra profilo
  • Play Store ID:
    Eu4ia
  • Sistema operativo:
    Ubuntu 11.10 + Windows 7
Re:Problema Rotazione RelativeLayout
« Risposta #2 il: 12 Maggio 2012, 17:29:45 CEST »
0
Ciao che ne pensi di utilizzare un asynctask per risolvere?
Se ti sono stato utile premi "Thanks" ;-)

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:Problema Rotazione RelativeLayout
« Risposta #3 il: 12 Maggio 2012, 19:58:34 CEST »
0
non ho valutato questa ipotesi perchè, l'animazione va a scatti solo se faccio muovere il layout generale, ma se faccio setAnimation() singolarmente a tutte le view nello stesso momento non va a scatti, solo che ottengo un'animazione diversa in questo modo, cmq se dici che può aiutarmi ci proverò, grazie