Autore Topic: Inserire bottoni dopo su metodo onDraw  (Letto 612 volte)

Offline Surface23

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC
  • Sistema operativo:
    Windows 7
Inserire bottoni dopo su metodo onDraw
« il: 13 Maggio 2014, 12:54:43 CEST »
0
Salve a tutti, vorrei scrivere un'applicazione dove inizialmente ho un background settato con il metodo onDraw e alla pressione del bottone dovrei cambiare sfondo.. Però appena inserisco il bottone l'applicazione si interrompe, come posso risolvere il problema?
Allego la parte del codice che riguarda il metodo onDraw()
Codice (Java): [Seleziona]
class DemoView extends View{ //Questo è il metodo onDraw che ho usato
                        private Paint paint;
                        public DemoView(Context context) {
                                super(context);
                                paint=new Paint();
                        }
                       
                        protected void onDraw(Canvas canvas) {
                                canvas.drawColor(Color.GREEN);
                               
                        }
}

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Inserire bottoni dopo su metodo onDraw
« Risposta #1 il: 13 Maggio 2014, 13:39:03 CEST »
0
Cosa significa "si interrompe"? Hai un crash? In tal caso guarda (e/o posta) il LogCat dell'errore per capire qual'è la parte di codice interessata.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Surface23

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC
  • Sistema operativo:
    Windows 7
Re:Inserire bottoni dopo su metodo onDraw
« Risposta #2 il: 16 Maggio 2014, 11:42:06 CEST »
0
Scusa se rispondo dopo molto tempo, questo è il mio codice, è una semplice gioco dell'impiccato.  Grazie dell'aiuto  :-)
Codice (Java): [Seleziona]
package com .example.provaa4;

import javax.swing.JOptionPane;

import android.R.id;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.text.Editable;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {
        static String pes=null;
        static String conf=null;
        static char a[]=new char[10];
        static int vita=6;
        static boolean ins=true;
       
        private DemoView dv;
       
        public void Ins(){
                if(ins){
                final EditText input = new EditText(this);
                new AlertDialog.Builder(this)
            .setTitle("Inserimento Parola")
            .setMessage("Inserisci")
            .setView(input)
            .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog, int whichButton) {
                         Editable editable = input.getText();
                         ins=false;
                     pes=editable.toString();
                     }
            })
            .setNegativeButton("Annulla", new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog, int whichButton) {
                        // Non fa niente
              }
            }).show();
                }
        }
       
       
        @SuppressWarnings("null")
        @Override
       
       
       
       
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                dv = new DemoView(this);
                setContentView(dv);
               
               

                       
               
                final Button bo;
                        final TextView[] b= new TextView[20];
                        final EditText c;
                     
                    c=(EditText) findViewById (R.id.ede);
               
                       
                        bo= (Button) findViewById (R.id.botti);
                        b[0]= (TextView) findViewById (R.id.testo);
                        b[1]=  (TextView) findViewById (R.id.T2);
                        b[2]=  (TextView) findViewById (R.id.T3);
                        b[3]=  (TextView) findViewById (R.id.T4);
                        b[4]=  (TextView) findViewById (R.id.T5);
                        b[5]=  (TextView) findViewById (R.id.T6);
                        b[6]=  (TextView) findViewById (R.id.T7);
                        b[7]=  (TextView) findViewById (R.id.T8);
                        b[8]=  (TextView) findViewById (R.id.T9);
                        b[9]=  (TextView) findViewById (R.id.T10);
                       
                       
                        bo.setOnClickListener(new View.OnClickListener(){      
        public void onClick(View arg) {
                                        if(arg.getId()==R.id.botti){
                                                if(bo.getText().equals("Prova")){
                                                String f=c.getText().toString();
                                                c.setText("");
                                                char tr=f.charAt(0);
                                                for(int i=0; i<pes.length();i++){
                                                        if(pes.charAt(i)==tr){
                                                        a[i]=tr;
                                                    b[i].setText(""+tr);
                                                        }
                                                        else
                                                                vita--;
                                                        }
                                               
                                                if(vita==0){
                                                        c.setText("Hai perso!");
                                                        ins=true;
                                                        bo.setText("Inizia");
                                                        }
                                               
                                                String j="";
                                                for(int i=0;i<pes.length();i++){
                                                                        j=j+a[i];
                                                                        }
                                               
                                                if(j.equals(pes)){
                                                        c.setText("Hai vinto!");
                                                ins=true;
                                                bo.setText("Inizia");
                                                       }
                                                }
                                               
                                                else if (bo.getText().equals("Inizia")){
                                                        for(int i=0;i<10;i++)
                                                                b[i].setText("");
                                                        c.setText("");
                                                        Ins();
                                                        bo.setText("Prova");
                                                }              
                                        }
                                }
                });     //Fine setOnClickListener
       
        }// fine onCreate
       
       
               
               
                class DemoView extends View{
                        private Paint paint;
                       

                        public DemoView(Context context) {
                                super(context);
                                paint=new Paint();
                        }
                       
                        protected void onDraw(Canvas canvas) {

                               
                                canvas.drawColor(Color.GREEN);
                               
                        }

                        }


}
               
                       
                       



Codice (XML): [Seleziona]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context=".MainActivity" >

    <TextView
       android:id="@+id/testo"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginLeft="25dp"
       android:layout_marginTop="250dp"
       />
   
   <TextView
     
      android:id="@+id/T2"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginLeft="50dp"
       android:layout_marginTop="250dp"
       
     
       />
    <TextView
     
      android:id="@+id/T3"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginLeft="75dp"
       android:layout_marginTop="250dp"
       
     
       />
   
    <TextView
     
      android:id="@+id/T4"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginLeft="100dp"
       android:layout_marginTop="250dp"
       
     
       />
   
    <TextView
     
      android:id="@+id/T5"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginLeft="125dp"
       android:layout_marginTop="250dp"
       
     
       />
    <TextView
     
      android:id="@+id/T6"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginLeft="150dp"
       android:layout_marginTop="250dp"
       
     
       />
    <TextView
     
      android:id="@+id/T7"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginLeft="175dp"
       android:layout_marginTop="250dp"
       
     
       />
    <TextView
     
      android:id="@+id/T8"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginLeft="200dp"
       android:layout_marginTop="250dp"
       
     
       />
    <TextView
     
      android:id="@+id/T9"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginLeft="225dp"
       android:layout_marginTop="250dp"
       
     
       />
    <TextView
     
      android:id="@+id/T10"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginLeft="250dp"
       android:layout_marginTop="250dp"
       
     
       />

    <Button
       android:id="@+id/botti"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginTop="320dp"
       android:layout_marginLeft="90dp"
       android:text="Inizia"
       
        />
   
   
    <EditText
       android:id="@+id/ede"
       android:layout_width="40dp"
       android:layout_height="40dp"
       android:layout_marginTop="290dp"
       android:layout_marginLeft="105dp"
       
       />
   
   

</RelativeLayout>

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Inserire bottoni dopo su metodo onDraw
« Risposta #3 il: 16 Maggio 2014, 11:58:11 CEST »
0
Ti premetto che non ho a portata di mano un PC col sistema di sviluppo dove provare le cose, ti rispondo solo per quello che leggo qua sul forum.

La prima cosa che dovresti fare è aprire il pannello LOGCAT del tuo sistema di sviluppo, cancellarne il contenuto e riprodurre l'errore. Ti appariranno diverse decine di righe di LOG, a te interessano quelle di colore rosso marchiate come ERROR. Scorri il LogCat partendo dall'ultima riga e tornando su, fino a trovare un "grappolo" di almeno una decina di righe rosse, che dovrebbe essere il LOG del tuo errore.

Copia quel gruppo di righe rosso qua nel forum, così da poterti spiegare come si fa debug degli errori tramite LogCat.


Poi, da una rapidissima occhiata del codice, io non creerei nessun oggetto (es: Button) nella OnCreate(), perchè come tu saprai certamente, non appena la OnCreate() termina, tali oggetti vengono distrutti (per cui il Listener si ritrova ad usare un oggetto che non esiste più). Dichiara il Button nella classe MainActivity, ma fuori dalle funzioni. Poi puoi assegnarlo dentro la OnCreate come hai già fatto.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Surface23

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC
  • Sistema operativo:
    Windows 7
Re:Inserire bottoni dopo su metodo onDraw
« Risposta #4 il: 16 Maggio 2014, 23:33:56 CEST »
0
Il programma va benissimo, ma appena aggiungo il metodo onDraw() da gli errori, senza grafica funziona perfettamente  :-)

Ho allegato un'immagine con gli errori del LogCat