Autore Topic: Utilizzare il metodo addView() più volte  (Letto 528 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
Utilizzare il metodo addView() più volte
« il: 30 Aprile 2012, 17:45:10 CEST »
0
Raga è tutto il giorno che ci sbatto la testa ma ancora non ho capito per quale motivo se ripeto il metodo addView() più volte non ottengo il risultato voluto

Questo è il codice:

Codice (Java): [Seleziona]
package it.petitogennaro.canvas01;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.Display;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.RelativeLayout;

public class Canvas01Activity extends Activity implements OnClickListener{
    Canvas canvas;
    Bitmap pallino, pallinoSelezionato;
    float xS , yS, xF, yF = 0;
    Display display;
    RelativeLayout main;
   

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(main);
       
        main = (RelativeLayout)findViewById(R.id.layout_base);
       
        display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
       
        Pallino p1 = new Pallino(this, 1, (display.getWidth()/2), (display.getHeight()/2)-145);
        Pallino p2 = new Pallino(this, 2, (display.getWidth()/2)-145, (display.getHeight()/2));
        Pallino p3 = new Pallino(this, 3, (display.getWidth()/2), (display.getHeight()/2)+145);
        Pallino p4 = new Pallino(this, 4, (display.getWidth()/2)+145, (display.getHeight()/2));
       
        main.addView(p1);
        main.addView(p2);
        main.addView(p3);
        main.addView(p4);      
       
        p1.setOnClickListener(this);
        p2.setOnClickListener(this);
        p3.setOnClickListener(this);
        p4.setOnClickListener(this);      
    }

        public void onClick(View v) {
                System.out.println(((Pallino) v).getIdInterno());
                switch(((Pallino) v).getIdInterno()){
                case 1:
                        System.out.println("1");
                        break;
                case 2:
                        System.out.println("2");
                        break;
                case 3:
                        System.out.println("3");
                        break;
                case 4:
                        System.out.println("4");
                        break;
                }
        }
}

questa è la classe Pallino
Codice (Java): [Seleziona]
package it.petitogennaro.canvas01;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.view.View;

public class Pallino extends View {

        private final float x;
        private final float y;
        private int idInterno;
       
        private Bitmap pallino = BitmapFactory.decodeResource(getResources(), R.drawable.cd_gold);

        public Pallino(Context context, int id, float x, float y) {
                super(context);
                this.x = x;
                this.y = y;
                this.idInterno = id;
                setId(id);
        }

        protected void onDraw(Canvas canvas) {
                super.onDraw(canvas);
                canvas.drawBitmap(pallino , x, y, null);
        }
       
        public int getIdInterno(){
                return this.idInterno;         
        }
}

In sostanza ogni volta che clicco su una view Pallino il comando system.out.println() Stampa sempre 4, come se le view si accorpassero e prendono tutte lo stesso id ossia quello della quarta view

ho trovato qualcosina in rete ma non riesco ad adattarlo ad il mio codice vi prego

ecco il link http://stackoverflow.com/questions/6716712/adding-multiple-views-of-the-same-type

vi prego aiutatemi

Offline qato

  • Nuovo arrivato
  • *
  • Post: 46
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus 5
Re:Utilizzare il metodo addView() più volte
« Risposta #1 il: 01 Maggio 2012, 11:26:56 CEST »
0
E se invece di
Codice: [Seleziona]
main.addView(p1);fai
Codice: [Seleziona]
main.addView(p1, 0);
main.addView(p2, 1);
main.addView(p3, 2);
main.addView(p4, 3);
cosa succede?


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:Utilizzare il metodo addView() più volte
« Risposta #2 il: 02 Maggio 2012, 09:22:04 CEST »
0
scusami se ti rispondo con ritardo, cmq avevo gia provato la tua soluzione non cambia nulla...entra sempre nell'onClick con l'id della quarta view

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:Utilizzare il metodo addView() più volte
« Risposta #3 il: 02 Maggio 2012, 10:24:01 CEST »
0
Prova così che dovrebbe andare (non so se sia il metodo migliore). Per ogni pallino anziché
main.addView(p1); etc. usa  le qattro righe indicate di seguito. x ed y sono i valori che nel tuo codice passi al costruttore delle palline

Codice (Java): [Seleziona]
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.leftMargin = x;
params.topMargin = y;
main.addView(p1,params);
Odio l'inglese e per un informatico non è il massimo

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:Utilizzare il metodo addView() più volte
« Risposta #4 il: 02 Maggio 2012, 17:32:06 CEST »
0
Raga, dopo molte ore a sbatterci la testa ho capito perchè accadeva ciò.

In pratica la view Pallino essendo disegnata con i canvas andava ad occupare tutto lo schermo, e quindi quando andavo a creare piu view di questa classe, entrando nel metodo onClickListener() acchiappava sempre la numero 4, perchè questa come ho già detto occupava tutto lo schermo, ringrazio tutti i ragazzi che hanno provato ad aiutarmi, metto topic risolto