Autore Topic: Bottone che si posizionano ogni volta in un posto diverso  (Letto 970 volte)

Offline Imran3

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
Bottone che si posizionano ogni volta in un posto diverso
« il: 04 Gennaio 2012, 17:25:05 CET »
0
ciao a tutti
sto sviluppando una mia app per android e mi trovo un'pò in difficolta, allora vi spiego:
vorrei  creare un activity che ha come Content un file xml in cui sono contenuto 4 bottoni, l'utente può cliccare su questi bottoni, vorrei fare in modo che ogni volta che l'utente clicca su un bottone venga cambiata la posizione dei bottoni all'interno delle schermo e aggiornato il ContentView per mostrare la nuova disposizione dei bottoni, in modo casuale, non so come potrei procedere, qualcuno mi potrebbe dare una mano
grazie

vi posto il codice xml:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >

    <TextView
       android:id="@+id/textView1"
       android:layout_width="match_parent"
       android:layout_height="25dp"
       android:text="Clicca sul bottono Vero"
       android:textSize="20dp"
       android:gravity="center"
       android:textColor="#FF00FF"/>




    <RelativeLayout
       android:id="@+id/relativeLayout1"
       android:layout_width="match_parent"
       android:layout_height="fill_parent" >

        <Button
           android:id="@+id/button4"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_centerHorizontal="true"
           android:layout_marginTop="22dp"
           android:text="Falso" />

        <Button
           android:id="@+id/button2"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentLeft="true"
           android:layout_below="@+id/button4"
           android:text="Vero" />

        <Button
           android:id="@+id/button3"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_below="@+id/button2"
           android:layout_marginTop="40dp"
           android:layout_toLeftOf="@+id/button4"
           android:text="Falso" />

        <Button
           android:id="@+id/button1"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentRight="true"
           android:layout_below="@+id/button2"
           android:text="Falso" />

    </RelativeLayout>

</LinearLayout>
« Ultima modifica: 04 Gennaio 2012, 17:39:53 CET da Imran3 »

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Bottone che si posizionano ogni volta in un posto diverso
« Risposta #1 il: 04 Gennaio 2012, 17:40:22 CET »
0
Credo ti convenga usare un absolute layout e poi usare la classe layoutParams quando vuoi cambiare la posizione dei pulsanti. Per ora non mi vengono in mente soluzioni più semplici.  ;-)

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:Bottone che si posizionano ogni volta in un posto diverso
« Risposta #2 il: 04 Gennaio 2012, 17:41:17 CET »
0
Un approccio potrebbe essere fare un layout con una griglia 5x5 (ad esempio) di Button, di cui ne mostri solo 5 a caso. Quando ne viene cliccato uno, lo rendi invisibile e ne mostri un altro di quelli invisibili. Sempre che ti vada bene la disposizione a griglia.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Imran3

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
Re:Bottone che si posizionano ogni volta in un posto diverso
« Risposta #3 il: 04 Gennaio 2012, 17:43:47 CET »
0
io avevo pensato a un RelativeLayout che contiene i 4(ne bastano 4 :D) Button e sono sempre visibili

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Bottone che si posizionano ogni volta in un posto diverso
« Risposta #4 il: 04 Gennaio 2012, 18:03:39 CET »
0
In quel caso credo tu debba comunque usare i layout params e costruire al momento le "regole" da settare ai pulsanti.
Esempio:
- salvi gli id dei quattro pulsanti in un arraylist
- al click del pulsante, rimuovi l'id del pulsante dall'arraylist, poi prendi a caso un id dall'array, crei un layoutparam e gli setti una regola LayoutParams.addRule(regola, id), dove regola è una delle costanti della classe RelativeLayout -tipo BELOW- e l'id è l'id preso a caso dall'array.
- setti il layoutparams al pulsante cliccato e ne riaggiungi l'id all'array.
Mi correggo: credo sia inattuabile perché si potrebbero avere dei riferimenti circolari tra i vari pulsanti!

Un'altra alternativa, nell'ipotesi di pulsanti tutti allineati orizzontalmente o verticalmente, potrebbe essere usare un linearLayout e, al click, fare linearLayout.removeView(pulsante) e poi linearLayout.addView(pulsante, posizione random compresa tra 1 e 3):

Codice (Java): [Seleziona]
public class Main extends Activity implements OnClickListener {
        LinearLayout container;
        Random random = new Random();

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                container = (LinearLayout) findViewById(R.id.container);

        }

        @Override
        public void onClick(View v) {
                container.removeView(v);
                container.addView(v, random.nextInt(2) + 1);
        }
}
« Ultima modifica: 04 Gennaio 2012, 18:22:58 CET da Verandi »

Offline Imran3

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
Re:Bottone che si posizionano ogni volta in un posto diverso
« Risposta #5 il: 04 Gennaio 2012, 18:32:41 CET »
0
Un'altra alternativa, nell'ipotesi di pulsanti tutti allineati orizzontalmente o verticalmente, potrebbe essere usare un linearLayout e, al click, fare linearLayout.removeView(pulsante) e poi linearLayout.addView(pulsante, posizione random compresa tra 1 e 3):
si però io vorrei che tutti i tasti cambiassero di posizione, non solo quello cliccato ma tutti

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Bottone che si posizionano ogni volta in un posto diverso
« Risposta #6 il: 04 Gennaio 2012, 18:40:30 CET »
0
Nell'onClick:
Codice (Java): [Seleziona]
        @Override
        public void onClick(View v) {
                for (int i=0; i<container.getChildCount();i++){
                        View child = container.getChildAt(i);
                        container.removeView(child);
                        container.addView(child, random.nextInt(3));
                }
        }
« Ultima modifica: 04 Gennaio 2012, 18:43:43 CET da Verandi »

Offline Imran3

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
Re:Bottone che si posizionano ogni volta in un posto diverso
« Risposta #7 il: 04 Gennaio 2012, 18:46:28 CET »
0
Nell'onClick:
Codice (Java): [Seleziona]
        @Override
        public void onClick(View v) {
                for (int i=0; i<container.getChildCount();i++){
                        View child = container.getChildAt(i);
                        container.removeView(child);
                        container.addView(child, random.nextInt(3));
                }
        }
aspeta aspetta
ma l'app crasha quando clicco sul bottone b[0]
Codice (Java): [Seleziona]
package com.imran9.altervista.org;

import java.util.Random;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
public class GiocoBottoni extends Activity{
        LinearLayout linear;
        final Random random = new Random();
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.bottoni);
                final Button b[] = new Button[4];
                b[0]=(Button)findViewById(R.id.bVero);
                b[1]=(Button)findViewById(R.id.bFalso1);
                b[2]=(Button)findViewById(R.id.bFalso2);
                b[3]=(Button)findViewById(R.id.bFalso3);
               
                b[0].setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v)
                        {
                                linear.removeView(b[0]);
                                //linear.addView(v,random.nextInt(2)+1);
                        }
                });
        }
}
come mai?

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Bottone che si posizionano ogni volta in un posto diverso
« Risposta #8 il: 04 Gennaio 2012, 18:53:06 CET »
0
Per saperlo dovresti guardare il logcat.
Ma il codice è quello che hai postato?  Se sì, il linearLayout è nullo perché nell'oncreate non richiami il findViewById().

Offline Imran3

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: 0
    • Mostra profilo
Re:Bottone che si posizionano ogni volta in un posto diverso
« Risposta #9 il: 04 Gennaio 2012, 19:16:02 CET »
0
Per saperlo dovresti guardare il logcat.
Ma il codice è quello che hai postato?  Se sì, il linearLayout è nullo perché nell'oncreate non richiami il findViewById().
ah gia !
va bene cosi :
linear=(LinearLayout) findViewById(R.id.linear);
 il file xml :
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical"
android:id="@+id/linear" >
   
        <Button
           android:id="@+id/bVero"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_x="168dp"
           android:layout_y="274dp"
           android:text="Vero" />
        <Button
           android:id="@+id/bFalso3"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignParentRight="true"
           android:layout_centerVertical="true"
           android:layout_marginRight="32dp"
           android:text="Falso" />
        <Button
           android:id="@+id/bFalso1"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_above="@+id/bFalso3"
           android:layout_marginBottom="30dp"
           android:layout_marginLeft="16dp"
           android:text="Falso" />
        <Button
           android:id="@+id/bFalso2"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_above="@+id/bFalso1"
           android:layout_marginBottom="14dp"
           android:layout_toLeftOf="@+id/bFalso3"
           android:text="Falso" />
</LinearLayout>
« Ultima modifica: 04 Gennaio 2012, 19:38:01 CET da Imran3 »