Autore Topic: come usare setBackgroundDrawable?  (Letto 1881 volte)

Offline mery-88

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows vista
come usare setBackgroundDrawable?
« il: 13 Luglio 2011, 15:56:31 CEST »
0
Ho bisogno al click su di un bottone che mi venga impostato una determinata immagine di sfondo collocata all'iterno della cartella drawable.

in particolare ho utilizzato il metodo "setBackgroundDrawable" in questo modo.

Drawable d;
pressButton.setBackgroundDrawable(d);

come inizializzo però la variabile "d" di tipo drawable? e soprattuto è corretta una cosa di questo tipo?

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:come usare setBackgroundDrawable?
« Risposta #1 il: 13 Luglio 2011, 16:10:44 CEST »
0
Puoi anche usare setBackgroundResource() e passare direttamente l'id della risorsa grafica.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:come usare setBackgroundDrawable?
« Risposta #2 il: 13 Luglio 2011, 16:11:03 CEST »
0
Se hai l'immagine nella cartella drawable ti conviene fare in questo modo:

Codice (Java): [Seleziona]
pressButton.setBackgroundResource(R.drawable.tua_immagine);
EDIT: bradipao mi hai anticipato :P


Offline mery-88

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows vista
Re:come usare setBackgroundDrawable?
« Risposta #3 il: 13 Luglio 2011, 23:34:06 CEST »
0
Se hai l'immagine nella cartella drawable ti conviene fare in questo modo:

Codice (Java): [Seleziona]
pressButton.setBackgroundResource(R.drawable.tua_immagine);
EDIT: bradipao mi hai anticipato :P

grazie! ho risolto! avrei però un'altra domanda sempre su questo tema.
Se dovessi impostare lo sfondo di questo bottone non prendendo un'immagine direttamente dalla cartella drawable, ma prendendola da una variabile contenente il nome di questa immagine in tale cartella, come posso fare?

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:come usare setBackgroundDrawable?
« Risposta #4 il: 14 Luglio 2011, 10:51:30 CEST »
0
vatti a guardare questo snippet di bradipao, fa proprio al caso tuo:

http://www.anddev.it/index.php/topic,1221.0.html
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline mery-88

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows vista
Re:come usare setBackgroundDrawable?
« Risposta #5 il: 14 Luglio 2011, 11:08:31 CEST »
0
vatti a guardare questo snippet di bradipao, fa proprio al caso tuo:

http://www.anddev.it/index.php/topic,1221.0.html

grazie per il link! però il mio problema è che non conosco il contenuto di questa variabile quindi nell'usare

int imgId = getResources().getIdentifier("cattedrale","drawable",getPackageName());

il parametro cattedrale, che sarebbe il nome del mio drawable, non so quale sia in quanto può contenere differenti valori (sfondi)

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:come usare setBackgroundDrawable?
« Risposta #6 il: 14 Luglio 2011, 11:14:16 CEST »
0
Se dovessi impostare lo sfondo di questo bottone non prendendo un'immagine direttamente dalla cartella drawable, ma prendendola da una variabile contenente il nome di questa immagine in tale cartella, come posso fare?

Ma a quanto dici dovresti avercelo il nome in una variabile: ci metti quella.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline mery-88

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows vista
Re:come usare setBackgroundDrawable?
« Risposta #7 il: 14 Luglio 2011, 11:31:07 CEST »
0
Ma a quanto dici dovresti avercelo il nome in una variabile: ci metti quella.

si il nome ce l'ho ma non so quale sia ho 16 differenti valori scelti in base ad un algoritmo.
io metterei semplicemente il nome della variabile al posto del nome dello sfondo. o sbaglio?

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:come usare setBackgroundDrawable?
« Risposta #8 il: 14 Luglio 2011, 11:33:22 CEST »
0
scusa: nel momento in cui devi prendere la risorsa dalla drawable, DEVI NECESSARIAMENTE CONOSCERE il nome della risorsa stessa....a prescindere che tu la ottenga mediante un algoritmo o meno.
Quindi utilizzerai il nome della variabile.

Oppure non ho capito bene?
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline mery-88

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows vista
Re:come usare setBackgroundDrawable?
« Risposta #9 il: 14 Luglio 2011, 11:44:54 CEST »
0
scusa: nel momento in cui devi prendere la risorsa dalla drawable, DEVI NECESSARIAMENTE CONOSCERE il nome della risorsa stessa....a prescindere che tu la ottenga mediante un algoritmo o meno.
Quindi utilizzerai il nome della variabile.

Oppure non ho capito bene?

cerco di spiegarmi meglio, ma probabilmente sono  io che non ho capito.
sto realizzando un puzzle, a seconda della figura scelta dall'utente viene caricata una certa immagine che è stata suddivisa in 16 pezzi e ciascuno dei quali rappresenta lo sfondo di 16 bottoni. per caricare questi 16 sfondi utilizzo

pressButton.setBackgroundDrawable(R.drawable.nomesfondo);


dopo però il tutto viene mischiato. al click su un bottone devo poter spostare i vari pezzi cioè prelevo lo sfondo (che a questo punto non conosco più perchè i pezzi sono stati rimescolati a caso. Se inizialmente nel bottone1 aveto lo sfondo1 adesso potrei avere lo sfondo5). Quindi prelevo tutti gli sfondi con getBackgroundDrawable (giusto?) li inserisco in un arrey e al click su di un bottone devo scambiare lo sfondo con il bottone di fianco.

esempio:
arreySfondi=sfondo3, sfondo1, sfondo4, sfondo 2      (rispettivamente di bottone1, bottone2,bottone3,bottone4)
                                                                                     devo riportare bottone1 con sfondo1, ecc.. quindi
al click su bottone1 il suo sfondo sarà arreySfondi[1] a questo punto scambio cioè voglio che il bottone2 (ad esempio) abbia arreySfondi[1] e il bottone1 abbia arreySfondi[2].
Non so cosa ci sia in arreySfondi
  • perchè questa sequenza è determinata casualmente. Mi verrebbe in mente di usare uno switch e risalire al contenuto ma visto che dovrei farlo 16 volte non mi sembra molto efficiente


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:come usare setBackgroundDrawable?
« Risposta #10 il: 14 Luglio 2011, 11:51:26 CEST »
0
Non ho ben capito i dettagli del problema, ma in generale l'approccio (secondo me) corretto è che anche in seguito al rimescolamento, tu devi tenere traccia dello stato del sistema rimescolato in una struttura dati, che poi è la base per gestire anche il disegno.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:come usare setBackgroundDrawable?
« Risposta #11 il: 14 Luglio 2011, 11:55:45 CEST »
0
concordo con bradipao.
Inoltre, come faresti alla fine a sapere se il puzzle è stato completato o meno?
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline mery-88

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows vista
Re:come usare setBackgroundDrawable?
« Risposta #12 il: 14 Luglio 2011, 11:58:14 CEST »
0
Non ho ben capito i dettagli del problema, ma in generale l'approccio (secondo me) corretto è che anche in seguito al rimescolamento, tu devi tenere traccia dello stato del sistema rimescolato in una struttura dati, che poi è la base per gestire anche il disegno.

Non ho ben capito i dettagli del problema, ma in generale l'approccio (secondo me) corretto è che anche in seguito al rimescolamento, tu devi tenere traccia dello stato del sistema rimescolato in una struttura dati, che poi è la base per gestire anche il disegno.

si esattto ne tengo traccia tramite l'arrey "arreySfondi" ogni volta prelevo nuovamente ed aggiorno l'arrey tenendo conto che l'ordine di memorizzazione in questo è associato all'ordine dei bottoni. quindi conosco sempre lo sfondo di un bottone tramite questo arrey.
Quello che ti chiedevo è: quando utilizzo

int imgId = getResources().getIdentifier("cattedrale","drawable",getPackageName());

io non ho più "cattedrale" ma ho arreySfondi, modifico semplicemente in questo modo:

int imgId = getResources().getIdentifier(arreySfondi[1],"drawable",getPackageName()); ?

Offline mery-88

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows vista
Re:come usare setBackgroundDrawable?
« Risposta #13 il: 14 Luglio 2011, 12:00:48 CEST »
0
concordo con bradipao.
Inoltre, come faresti alla fine a sapere se il puzzle è stato completato o meno?

ad ogni scambio eseguo la verifica: riprelevo ancora tutti gli sfondi se l'arreySfondi è perfettamente ordinato cioè

arreySfondi[0]=sfondo1;
arreySfondi[1]=sfondo2;
ecc

allora il puzzle è ordinato.
l'algoritmo funziona perchè l'ho già fatto con i numeri (gioco del 15) adesso volevo aggiungere la versione puzzle

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:come usare setBackgroundDrawable?
« Risposta #14 il: 14 Luglio 2011, 12:05:05 CEST »
0
si esattto ne tengo traccia tramite l'arrey "arreySfondi" ogni volta prelevo nuovamente ed aggiorno l'arrey tenendo conto che l'ordine di memorizzazione in questo è associato all'ordine dei bottoni. quindi conosco sempre lo sfondo di un bottone tramite questo arrey.
Quello che ti chiedevo è: quando utilizzo

int imgId = getResources().getIdentifier("cattedrale","drawable",getPackageName());

io non ho più "cattedrale" ma ho arreySfondi, modifico semplicemente in questo modo:

int imgId = getResources().getIdentifier(arreySfondi[1],"drawable",getPackageName()); ?

se arraySfondi[1] deriva da getBackground() ottieni direttamente un oggetto Drawable che poi imposti facendo setBackground(arraySfondi[1])
se invece non ho capito come, ottieni l'id della risorsa gli imposti il setBackgroundResource(resourceID)
se invece in arraySfondi hai i NOMI delle drawable (che non ho capito da dove li prendi) allora usi il metodo che hai scritto
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia