Autore Topic: API 8 Frame animation come linearLayout Background  (Letto 750 volte)

Offline LucaGessi

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s
  • Sistema operativo:
    Ubuntu 10.04
API 8 Frame animation come linearLayout Background
« il: 18 Gennaio 2012, 01:39:00 CET »
0
Salve a tutti. Avendo iniziato da poco a programmare in Android sto cercando di imparare le cose di base.
Non riesco purtroppo a caricare una frame animation come background della linearlayout.
La animation l'ho creata in un file xml dentro drawable poi inizialmente ho provato a caricare la animazione dal layout xml aggiungendo l'attributo android:background="@drawable/anim" ma non funziona, è come se caricasse solo il primo fotogramma. Successivamente ho provato a seguire la guida di developers.android.com che consiglia di impostare il background di una view da codice della activity.
In questo caso però l'applicazione non parte proprio ma si arresta al solo click dell'icona nel menù delle applicazioni.

//Layot xml
Codice (Java): [Seleziona]
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ImageView image = (ImageView) findViewById(R.id.linear);
        image.setBackgroundResource(R.drawable.ani);
        AnimationDrawable anim = (AnimationDrawable) image.getBackground();
        anim.start();

//Frame Animation
Codice (XML): [Seleziona]
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
<item android:drawable="@drawable/ani1" android:duration="200"/>
<item android:drawable="@drawable/ani2" android:duration="200"/>
<item android:drawable="@drawable/ani3" android:duration="200"/>
</animation-list>

« Ultima modifica: 18 Gennaio 2012, 10:29:20 CET da Ricky`, Reason: usa il tag code! »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:API 8 Frame animation come linearLayout Background
« Risposta #1 il: 18 Gennaio 2012, 10:30:01 CET »
0
Devi postare il logcat.

Offline LucaGessi

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s
  • Sistema operativo:
    Ubuntu 10.04
Re:API 8 Frame animation come linearLayout Background
« Risposta #2 il: 18 Gennaio 2012, 15:02:57 CET »
0
Scusatemi ma anche nel caso in cui il background lo carico da codice il risultato è lo stesso, cioè carica solo il primo frame della animazione. Prima la applicazione non funzionava correttamente perchè mi ero scordato di cambiare le configurazioni di emulazione. Ora parte ma non si avvia l'animazione.
Riguardo al catlog, scusate ma non so di preciso cosa sia. Ho notato che prima si apriva una finestra dopo al crash dell'applicazione chiamata appunto catlog con una serie di scritte, ma ora non si apre nulla.
In poche parole non si riscontrano problemi nel lancio della app ma la animazione di sfondo carico solo il primo frame!!
« Ultima modifica: 18 Gennaio 2012, 15:10:07 CET da LucaGessi »

Offline LucaGessi

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s
  • Sistema operativo:
    Ubuntu 10.04
Re:API 8 Frame animation come linearLayout Background
« Risposta #3 il: 18 Gennaio 2012, 23:55:46 CET »
0
Ho allegato l'immagine con i messaggi di errore del catlog.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:API 8 Frame animation come linearLayout Background
« Risposta #4 il: 19 Gennaio 2012, 11:08:03 CET »
0
Codice (Java): [Seleziona]
        ImageView image = (ImageView) findViewById(R.id.linear);
Se R.id.linear è un LinearLayout non puoi castarlo a una ImageView.

Offline LucaGessi

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s
  • Sistema operativo:
    Ubuntu 10.04
Re:API 8 Frame animation come linearLayout Background
« Risposta #5 il: 19 Gennaio 2012, 12:35:54 CET »
0
L'ho notato e ho cambiato. Ho caricato una imageview.
Alla fine ho risolto scrivendo start() fuori dalla funzione on create e dentro una funzione che attiva l'animazione al resume dell'activity altrimenti la stoppa.
Ora funziona! Cambiare R.id.layout con una imageview non bastava!!
Grazie

Offline kronosboy

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • https://twitter.com/#!/kronosboy
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S
  • Sistema operativo:
    Mac Os X 10.7
Re:API 8 Frame animation come linearLayout Background
« Risposta #6 il: 19 Marzo 2012, 15:50:00 CET »
0
Io ho un problema relativo a questo topic. Ho impostato un set di immagini come sfondo per un LinearLayout in modo tale da avere uno sfondo animato. Il codice nella mia activity è il seguente:

Codice (Java): [Seleziona]
@Override
    public void onWindowFocusChanged(boolean hasFocus){
                super.onWindowFocusChanged(hasFocus);
                LinearLayout mainLayout = (LinearLayout)findViewById(R.id.mainLayout);
                mainLayout.setBackgroundResource(R.drawable.bg_anim);
        AnimationDrawable anim = (AnimationDrawable)mainLayout.getBackground();
        anim.start();
        }

Se lancio l'applicazione con un emulatore con API = 15 l'animazione la vedo correttamente, se lo lancio su un emulatore con API = 7 invece l'immagine è statica. Stessa cose se lo lancio sul mio dispositivo che ha il firmware 2.3.4.
Com'è possibile?

Grazie
Even a stopped clock is right twice a day
[H.H.]

Offline kronosboy

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • https://twitter.com/#!/kronosboy
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S
  • Sistema operativo:
    Mac Os X 10.7
Re:API 8 Frame animation come linearLayout Background
« Risposta #7 il: 19 Marzo 2012, 16:18:00 CET »
0
Ok.. ho risolto. Per conoscenza del popolo vi posto la soluzione che ho trovato:


Codice (Java): [Seleziona]
        @Override
    public void onWindowFocusChanged(boolean hasFocus){
                super.onWindowFocusChanged(hasFocus);
                LinearLayout mainLayout = (LinearLayout)findViewById(R.id.mainLayout);
                mainLayout.setBackgroundResource(R.drawable.bg_anim);
                AnimationDrawable anim = (AnimationDrawable)mainLayout.getBackground();
                mainLayout.post(new Starter(anim));
        }





class Starter implements Runnable {
        AnimationDrawable anim;
       
        public Starter(AnimationDrawable anim){
                this.anim = anim;
        }
       
        @Override
        public void run() {
                anim.start();  
        }      
}
Even a stopped clock is right twice a day
[H.H.]