Autore Topic: repaint button  (Letto 1078 volte)

Offline mikuzz

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
repaint button
« il: 05 Agosto 2012, 11:30:05 CEST »
0
Salve di nuovo :) creando la mia app ho riscontrato un problemino cioè quando va a inserire dei button e quando li muove mi si diventano invisibili tutti i button prima creati per qualche decimo di secondo... vi posto un po di codice:
Codice (Java): [Seleziona]
for(int i=0;i<(int)(1+Math.random()*(Opzioni.getDiff()+punt/100));i++){
                                // da al piccione una partenza da destra o sinistra
                                int x=0;
                                if(Math.random()*10<5)
                                x=Inizio.x-Inizio.x/10;
                                //da al piccione una partenza y casuale entro un limite
                                int y=(int)(Inizio.x/10+Math.random()*(Inizio.y/4));
                                if(Math.random()*10<7){
                                        //crea il piccione e gli da una grandezza
                                        ImageButton preso=new ImageButton(this);
                                        preso.setSoundEffectsEnabled(false);
                                        preso.setVisibility(View.INVISIBLE);
                                        sfondo.addView(preso,Inizio.x/10,Inizio.y/20);
                                        //crea la cacca con una grandezza
                                        ImageButton cacca=new ImageButton(this);
                                        cacca.setSoundEffectsEnabled(false);
                                        cacca.setVisibility(View.INVISIBLE);
                                        sfondo.addView(cacca,Inizio.x/15,Inizio.y/20);
                                        UccelloGrafico pigeon=new UccelloGrafico(piccione,preso,cacca,x,y,sfondo);

                                        pigeon.animated();
                                }

questo è il for che mi crea i button e li inserisce nel layout... ora vi posto il metodo animated che fa muovere i piccioni...

Codice (Java): [Seleziona]
public void animated(){
                Handler handler=new Handler();
                handler.postDelayed(new Runnable(){

                public void run()
                {
                        //controlla che il piccione arriva ala fine dello schermo
                        if(helpX<Inizio.x || helpX>0)
                                if(NuovaPartita.getPausa()==false)
                                        animated();
                                else {
                                        aspetta();
                                }
                        else{
                                help.removeView(preso);
                        }
                        // setta visibile il piccione solo appena creato e controlla se viene da destra o sinistra e   se è attivata la pausa
                        if(x>700)
                                sinistraDestra=false;
                        if(helpX==0 && sinistraDestra && !NuovaPartita.getPausa())
                                preso.setVisibility(View.VISIBLE);
                        if(helpX==Inizio.x-Inizio.x/10 && !sinistraDestra && !NuovaPartita.getPausa())
                                preso.setVisibility(View.VISIBLE);
                        // muove il piccione con velocità  differenti lungo x e gli da uno sfondo
                        if(uccello.getNome().equals("Picchio")){
                                if(sinistraDestra){
                                        helpX=helpX+vel*2;
                                }
                                else{
                                        helpX=helpX-vel*2;
                                }
                        }
                        else{
                                if(sinistraDestra){
                                        helpX=helpX+vel;
                                }
                                else{
                                        helpX=helpX-vel;
                                }
                        }
                        // muove il piccione lungo y con velocitá diffrenti
                        if(!uccello.getNome().equals("Picchio")){
                                if(cresce==true)
                                        y=y+vel;
                                else
                                        y=y-vel;
                        }
                        // da un range lungo y sul quale si possono muovere i piccioni
                        if(y>Inizio.y/4)
                                cresce=false;
                        if(y<Inizio.y/20)
                                cresce=true;
                        sposta();

                }


        },25);
        }

e il metodo sposta sposta soltanto il button con un metodo layout... ma il problema è solo alla creazione dei button perchè quando si creano mi da questo problema non quando si muovono...

se serve qualcos'altro fatemi sapere, grazie anticipate per le eventuali risposte :=)

ah dimenticavo il logcat che mi da il seguente errore su android 2.2 (emulatore) ma non me lo da su android 4.0.3 (mio tab)

Codice (Java): [Seleziona]
08-05 09:42:05.936: D/dalvikvm(283): GC_EXTERNAL_ALLOC freed 826 objects / 61120 bytes in 131ms
08-05 09:42:06.805: D/dalvikvm(283): GC_EXTERNAL_ALLOC freed 219 objects / 10600 bytes in 92ms
08-05 09:42:09.385: D/dalvikvm(283): GC_EXTERNAL_ALLOC freed 221 objects / 12000 bytes in 198ms
08-05 09:42:14.356: D/dalvikvm(283): GC_EXTERNAL_ALLOC freed 54 objects / 2704 bytes in 182ms
08-05 09:42:28.935: E/dalvikvm-heap(283): 10535536-byte external allocation too large for this process.
08-05 09:42:28.935: E/GraphicsJNI(283): VM won't let us allocate 10535536 bytes
08-05 09:42:28.955: D/AndroidRuntime(283): Shutting down VM
08-05 09:42:28.955: W/dalvikvm(283): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
08-05 09:42:29.045: E/AndroidRuntime(283): FATAL EXCEPTION: main
08-05 09:42:29.045: E/AndroidRuntime(283): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.graphics.Bitmap.nativeCreate(Native Method)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.graphics.Bitmap.createBitmap(Bitmap.java:468)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.graphics.Bitmap.createBitmap(Bitmap.java:435)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:488)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:462)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:323)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.content.res.Resources.loadDrawable(Resources.java:1709)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.content.res.Resources.getDrawable(Resources.java:581)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.view.View.setBackgroundResource(View.java:7393)
08-05 09:42:29.045: E/AndroidRuntime(283):      at com.miraf.pigeonshoot.NuovaPartita.onCreate(NuovaPartita.java:73)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.app.ActivityThread.access$2300(ActivityThread.java:125)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.os.Handler.dispatchMessage(Handler.java:99)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.os.Looper.loop(Looper.java:123)
08-05 09:42:29.045: E/AndroidRuntime(283):      at android.app.ActivityThread.main(ActivityThread.java:4627)
08-05 09:42:29.045: E/AndroidRuntime(283):      at java.lang.reflect.Method.invokeNative(Native Method)
08-05 09:42:29.045: E/AndroidRuntime(283):      at java.lang.reflect.Method.invoke(Method.java:521)
08-05 09:42:29.045: E/AndroidRuntime(283):      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-05 09:42:29.045: E/AndroidRuntime(283):      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-05 09:42:29.045: E/AndroidRuntime(283):      at dalvik.system.NativeStart.main(Native Method)
08-05 09:42:47.135: I/Process(283): Sending signal. PID: 283 SIG: 9
« Ultima modifica: 05 Agosto 2012, 11:46:33 CEST da mikuzz »

Offline mikuzz

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:repaint button
« Risposta #1 il: 05 Agosto 2012, 21:25:49 CEST »
0
Potrebbe essere che le immagini di sfondo dei button sono troppo grandi e ci vuole troppo a fare il repaint?? Sono +- 400x600 a quanto ricordo.... Di nuovo grazie per l'attenzione xD

Offline mikuzz

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:repaint button
« Risposta #2 il: 06 Agosto 2012, 03:25:10 CEST »
0
Erano le immagini u.u

Offline thejames90

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc one
  • Sistema operativo:
    windows 7/8
Re:repaint button
« Risposta #3 il: 24 Agosto 2012, 14:10:34 CEST »
0
scusa, stavo prendendo spunto dalla tua applicazione e non riesco a capire di che tipo è la variabile sfondo, potresti spiegarmi?? grazie in anticipo :)

Offline mikuzz

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:repaint button
« Risposta #4 il: 24 Agosto 2012, 22:31:05 CEST »
0
è un relativeLayout se vuoi vedere com'è venuta l'apk si chiama PigeonsShootFree :) è gratis e mi servono consigli su come migliorarla :)

Offline thejames90

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc one
  • Sistema operativo:
    windows 7/8
Re:repaint button
« Risposta #5 il: 25 Agosto 2012, 11:06:12 CEST »
0
grazie mille x l'aiuto..cmq ho provato l'applicazione, intanto complimenti x l'idea..nn male!! cmq secondo me sarebbe meglio se mettessi una barra x la tua vita o la vita dell'auto come vuoi dire :) è solo un mio parere xò, xkè ci sono rimasto male quando tutto ad un tratto mi è apparso il punteggio finale :)

Offline mikuzz

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:repaint button
« Risposta #6 il: 25 Agosto 2012, 12:34:29 CEST »
0
ahahhaha okok :) grazie per il suggerimento :)

Offline thejames90

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc one
  • Sistema operativo:
    windows 7/8
Re:repaint button
« Risposta #7 il: 03 Settembre 2012, 14:36:00 CEST »
0
ciao, scusa se ti disturbo ancora.. ma per posizionare i bottoni nei vari punti dello schermo hai usato  UccelloGrafico pigeon=new UccelloGrafico(piccione,preso,cacca,x,y,sfondo); ?? e uccellografico è sempre un tuo layout?? grazie ancora :)

Offline mikuzz

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:repaint button
« Risposta #8 il: 04 Settembre 2012, 17:04:09 CEST »
0
no è una classe a cui passo il bottone e sposto quel bottone (che sarebbe preso) in quella classe con il metodo sposta() che a sua volta usa un RelativeLayout.LayoutParams per spostare il bottone potresti usare anche il metodo layout(int, int, int, int) ( non usare setX() e setY() perchè nelle versioni precedenti al 3 non ci sono questi metodi)

Offline thejames90

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc one
  • Sistema operativo:
    windows 7/8
Re:repaint button
« Risposta #9 il: 04 Settembre 2012, 19:14:51 CEST »
0
grazie mille x la risposta, quindi gli int di layout stanno per destra sinistra alto e basso giusto??

Offline mikuzz

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Re:repaint button
« Risposta #10 il: 08 Settembre 2012, 11:54:05 CEST »
0
sono le posizioni relative al parent