CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: gioviale1956 con ben 1 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: bluemask con ben 8 Thanks ricevuti negli ultimi sette giorni
Utente del mese: carotix con ben 24 Thanks ricevuti nell'ultimo mese

Pagina 2 di 3 primaprima 123 ultimoultimo
Ultima pagina
Visualizzazione dei risultati da 11 a 20 su 23
Discussione:

Animazione frame by frame

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #11
    Senior Droid


    Registrato dal
    Dec 2009
    Messaggi
    307

    Ringraziamenti
    15
    Ringraziato 40 volte in 39 Posts
    Predefinito

    Che dimensioni hanno queste immagini? (Larghezza x Altezza, il peso in KB ce l'hai già detto prima, 20 KB mi pare)
    Quante ne carichi contemporaneamente?

  2.  
  3. #12
    Senior Droid


    Registrato dal
    Feb 2010
    Messaggi
    305

    Ringraziamenti
    4
    Ringraziato 17 volte in 17 Posts
    Predefinito

    Ok hai sbagliato un bel po' di roba, ho riorganizzato un po' il tutto, ecco i files:

    x
     
    1
    public class Game extends Activity {
    2
        private static final String TAG = "AndroidBomb";
    3
        private ImageView imgCtr;
    4
        private Button startButton;
    5
        private Handler handler = new Handler();
    6
        private Bitmap [] bitmapArrays;
    7
        private int n = 0;
    8
        private Resources res;
    9
        
    10
        public static final String KEY_NPLAYERS = "org.FMsolution.menu.nplayers";
    11
        
    12
        protected void onCreate(Bundle savedInstanceState) {
    13
            super.onCreate(savedInstanceState);
    14
            setContentView(R.layout.main);
    15
            
    16
            
    17
            //le findViewById vanno messe sempre DOPO la setContentView
    18
            imgCtr=(ImageView) findViewById(R.id.animatedImage); //IMPORTANTISSIMO! altrimenti imgCtr e' null
    19
            startButton=(Button) findViewById(R.id.startAnimationButton); //idem
    20
            
    21
            
    22
            
    23
            startButton.setOnClickListener(buttonListener); //imposto il listener che viene attivato al click sul bottone
    24
            
    25
            res=getResources();
    26
            
    27
            bitmapArrays = new Bitmap []{
    28
                    BitmapFactory.decodeResource(res,R.drawable.finale_0001),
    29
                    BitmapFactory.decodeResource(res,R.drawable.finale_0002),
    30
                    BitmapFactory.decodeResource(res,R.drawable.finale_0003),
    31
                    BitmapFactory.decodeResource(res,R.drawable.finale_0004),
    32
                    BitmapFactory.decodeResource(res,R.drawable.finale_0005),
    33
                    BitmapFactory.decodeResource(res,R.drawable.finale_0006),
    34
                    BitmapFactory.decodeResource(res,R.drawable.finale_0007),
    35
                    BitmapFactory.decodeResource(res,R.drawable.finale_0008),};
    36
            
    37
            startAnimation();
    38
        }
    39
        
    40
        //callback attivato quando clicchi sul bottone
    41
        private View.OnClickListener buttonListener=new View.OnClickListener() {
    42
            
    43
            public void onClick(View v) {
    44
                
    45
                switch(v.getId()){ //in questo caso la switch e' inutile ma a scopo didattico :D
    46
                    
    47
                case R.id.startAnimationButton:
    48
                    n=0;
    49
                    imgCtr.setImageBitmap(bitmapArrays[n++]);
    50
                    startAnimation();
    51
                    break;
    52
                }
    53
                
    54
            }
    55
        };
    56
        
    57
        private Runnable mUpdateTask = new Runnable() {
    58
            
    59
            @Override
    60
            public void run() {
    61
                imgCtr.setImageBitmap(bitmapArrays[n++]);
    62
    63
                
    64
                if(n<bitmapArrays.length-1)
    65
                    handler.postDelayed(mUpdateTask, 200);
    66
                
    67
            }
    68
        };
    69
        
    70
        private void startAnimation(){
    71
            handler.removeCallbacks(mUpdateTask);
    72
            handler.postDelayed(mUpdateTask, 200);
    73
        }
    74
        
    75
    }



    Il layout (res/layout/main.xml):

    19
     
    1
    <?xml version="1.0" encoding="utf-8"?>
    2
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3
        android:orientation="vertical"
    4
        android:layout_width="fill_parent"
    5
        android:layout_height="fill_parent"
    6
        >    
    7
    <ImageView  
    8
        android:id="@+id/animatedImage"
    9
        android:layout_width="wrap_content" 
    10
        android:layout_height="wrap_content" 
    11
        android:layout_centerHorizontal="true"
    12
        />
    13
        
    14
    <Button android:layout_width="wrap_content" 
    15
        android:layout_height="wrap_content"
    16
        android:layout_centerInParent="true"
    17
        android:text="@string/startText"
    18
        android:id="@+id/startAnimationButton"/>
    19
    </RelativeLayout>


    e il file res/values/strings.xml:

    6
     
    1
    <?xml version="1.0" encoding="utf-8"?>
    2
    <resources>
    3
        <string name="hello">Hello World, Game!</string>
    4
        <string name="app_name">game</string>
    5
        <string name="startText">Restart animation!</string>
    6
    </resources>



    Così almeno sul mio acer liquid funziona senza problemi

    Ovviamente nella cartella res/drawable ci devi mettere i files finale_0001.png, finale_0002.png eccetera!

  4. Il seguente Utente ha ringraziato eafkuor per il post:

    FMsolution (19-08-10)

  5. #13
    Androidiano L'avatar di FMsolution


    Registrato dal
    Aug 2010
    Località
    Spoleto (PG)
    Messaggi
    51
    Smartphone
    I5800

    Ringraziamenti
    1
    Ringraziato 5 volte in 5 Posts
    Predefinito

    Grazie mille eafkuor, testato e funziona perfettamente effettivamete c'erano un pò di errori ero andato in panne con l'array di bitmap che non mi ero accorto degli errori, grazie ancora.


    Quote Originariamente inviato da Orochi Visualizza il messaggio
    Che dimensioni hanno queste immagini? (Larghezza x Altezza, il peso in KB ce l'hai già detto prima, 20 KB mi pare)
    Quante ne carichi contemporaneamente?
    Le immagini sono 205x180 pixel profondità 32 bit, non mi sembrano molto grandi.

  6. #14
    Senior Droid


    Registrato dal
    Feb 2010
    Messaggi
    305

    Ringraziamenti
    4
    Ringraziato 17 volte in 17 Posts
    Predefinito

    Quote Originariamente inviato da FMsolution Visualizza il messaggio
    Grazie mille eafkuor, testato e funziona perfettamente effettivamete c'erano un pò di errori ero andato in panne con l'array di bitmap che non mi ero accorto degli errori, grazie ancora.
    Figurati

  7. #15
    Shu
    Shu non è in linea
    Androidiano


    Registrato dal
    Aug 2009
    Messaggi
    158

    Ringraziamenti
    6
    Ringraziato 17 volte in 13 Posts
    Predefinito

    Quote Originariamente inviato da FMsolution Visualizza il messaggio
    Le immagini sono 205x180 pixel profondità 32 bit, non mi sembrano molto grandi.
    Significa che ogni immagine, decodificata, occupa 145 KB (205*180*4). 25 immagini sono 3.5 MB.

    Su Android un'applicazione può occupare al massimo 16 MB (su dispositivi "vecchi") o 24 MB (sui "nuovi").

    E` un po' strano che ti dia OutOfMemory così presto, a meno che tu non abbia veramente poca RAM sul dispositivo o che il resto del tuo programma non ne occupi molta.

    In ogni caso ti converrebbe studiare qualche sistema di double o triple buffering, e quindi di usare solo 2 o 3 bitmap contemporaneamente in memoria, caricando le altre quando servono.

    Bye.

  8. #16
    Androidiano L'avatar di FMsolution


    Registrato dal
    Aug 2010
    Località
    Spoleto (PG)
    Messaggi
    51
    Smartphone
    I5800

    Ringraziamenti
    1
    Ringraziato 5 volte in 5 Posts
    Predefinito

    Quote Originariamente inviato da Shu Visualizza il messaggio
    Significa che ogni immagine, decodificata, occupa 145 KB (205*180*4). 25 immagini sono 3.5 MB.

    Su Android un'applicazione può occupare al massimo 16 MB (su dispositivi "vecchi") o 24 MB (sui "nuovi").

    E` un po' strano che ti dia OutOfMemory così presto, a meno che tu non abbia veramente poca RAM sul dispositivo o che il resto del tuo programma non ne occupi molta.

    In ogni caso ti converrebbe studiare qualche sistema di double o triple buffering, e quindi di usare solo 2 o 3 bitmap contemporaneamente in memoria, caricando le altre quando servono.

    Bye.
    grazie per la risposta, hai qualche link che trattano l'argomento, potrebbe essere molto interessante.ciao.

  9. #17
    Androidiano L'avatar di FMsolution


    Registrato dal
    Aug 2010
    Località
    Spoleto (PG)
    Messaggi
    51
    Smartphone
    I5800

    Ringraziamenti
    1
    Ringraziato 5 volte in 5 Posts
    Predefinito

    Rieccomi, il problema si è ripresentato, ho provato a non fermare l'animazione ma ha creare un loop però al secondo ciclo si blocca e mi da outofmemory ecc.., non capisco ho ridotto anche le immagini sono 25 e di dimensione 11 kb mi sembra molto strano che non riesco ad eseguire una semplice animazione.

    C'è un modo per monitorare le risorse e controllare quanta memoria viene utilizzata in un certo periodo.

    Grazie,ciao.

  10. #18
    Senior Droid


    Registrato dal
    Feb 2010
    Messaggi
    305

    Ringraziamenti
    4
    Ringraziato 17 volte in 17 Posts
    Predefinito

    Ma scusa il loop come lo fai? Non rimetti semplicemente n=0?

  11. #19
    Androidiano L'avatar di FMsolution


    Registrato dal
    Aug 2010
    Località
    Spoleto (PG)
    Messaggi
    51
    Smartphone
    I5800

    Ringraziamenti
    1
    Ringraziato 5 volte in 5 Posts
    Predefinito

    si ho risolto il questa maniera:

    15
     
    1
    2
    private Runnable mUpdateTask = new Runnable() {
    3
            
    4
            //@Override
    5
            public void run() {
    6
                imgCtr.setImageBitmap(bitmapArrays[n++]);
    7
                    
    8
                if(n<bitmapArrays.length -1){
    9
                    handler.postDelayed(mUpdateTask, 250);
    10
                }else if (n >= bitmapArrays.length - 1) {
    11
                        n = 0;
    12
                        startAnimation();
    13
                    }
    14
            } 
    15
        };


    adesso funziona.

  12. #20
    Senior Droid


    Registrato dal
    Feb 2010
    Messaggi
    305

    Ringraziamenti
    4
    Ringraziato 17 volte in 17 Posts
    Predefinito

    Credo che potresti eliminare il secondo if:

    14
     
    1
    private Runnable mUpdateTask = new Runnable() {
    2
            
    3
            //@Override
    4
            public void run() {
    5
                imgCtr.setImageBitmap(bitmapArrays[n++]);
    6
                    
    7
                if(n<bitmapArrays.length -1){
    8
                    handler.postDelayed(mUpdateTask, 250);
    9
                }else {
    10
                        n = 0;
    11
                        startAnimation();
    12
                    }
    13
            } 
    14
        };


    E magari potresti salvarti bitmapArrays.length -1 in modo da non doverlo far ricalcolare al processore ogni volta Ma sono solo finezze, di certo non gli ci vuole molto a fare una sottrazione o un if.

Pagina 2 di 3 primaprima 123 ultimoultimo
Ultima pagina

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy