Array di immagini

alexius85

Nuovo Utente
30 Apr 2020
7
0
1
Buonasera a tutti e grazie anticipatamente a chi riuscirà ad aiutarmi.
Premetto che sto sviluppando un'app con Android Studio aggiornato all'ultima versione.
Comunque questo è il mio problema.

Devo creare un array di 10 immagini con inizialmente tutte le 10 posizioni occupate dalla stessa immagine ovvero ledoff.png (tale immagine è inserita nella cartella drawable del progetto).

Poi in base a un valore estratto da una formula, che può risultare essere un numero da 0 a 10, devo sostituire nell'array l'immagine con ledon.png (anch'essa inserita nella cartella drawable del progetto).

Per esempio se il valore che risulta dalla formula è 7, devo sostituire nell'array nelle prime 7 posizioni l'immagine ledoff.png con ledon.png e lasciare le restanti immagini presenti nell'array (quindi in questo caso da 8 a 10) intoccate.

Dopo di che devo far visualizzare sulla home della app questo array di immagini che risulterà una sorta di progress bar.

E' fattibile come cosa? Se sì chi potrebbe gentilmente darmi una mano??

Grazie grazie grazie.
 

WmbertSea

Utente Attivo
28 Nov 2014
178
27
28
Ciao, presumo sia fattibile ma ho l'impressione che ti stia complicando inutilmente il lavoro. A meno che non mi stia sfuggendo qualcosa, se l'intento è realizzare una sorta di progress bar, non vedo la necessità di usare un array. Penso sia sufficiente il valore della formula che in qualche modo ti servirà per mostrare l'una o l'altra immagine rispettivamente alla posizione in cui si trova nella sequenza che mostrerai.

Chiarisci perché hai pensato di risolvere con un array e con quale linguaggio devi sviluppare questa cosa. Non mi è chiaro se il risultato deve essere visualizzato attraverso una pagina html o se il tutto rimane nell'ambito java/kotlin.
 

alexius85

Nuovo Utente
30 Apr 2020
7
0
1
Ciao, presumo sia fattibile ma ho l'impressione che ti stia complicando inutilmente il lavoro. A meno che non mi stia sfuggendo qualcosa, se l'intento è realizzare una sorta di progress bar, non vedo la necessità di usare un array. Penso sia sufficiente il valore della formula che in qualche modo ti servirà per mostrare l'una o l'altra immagine rispettivamente alla posizione in cui si trova nella sequenza che mostrerai.

Chiarisci perché hai pensato di risolvere con un array e con quale linguaggio devi sviluppare questa cosa. Non mi è chiaro se il risultato deve essere visualizzato attraverso una pagina html o se il tutto rimane nell'ambito java/kotlin.
Praticamente l'effetto sara' questo.. ci saranno più barre come queste sulla app che funzioneranno come descritto in precedenza sul mio post. Non c'e' nulla di html o web. La app gira localmente e senza internet. La sto sviluppando con Android Studio in Java.
1588333604922.png
 

WmbertSea

Utente Attivo
28 Nov 2014
178
27
28
Ciao, se ci sono più barre ci sarà una classe che andrai ad istanziare, giusto? Hai già sviluppato questa parte?

Se la grafica delle immagini è quella, penso non ti serva nemmeno usare dei file immagine, ma potresti disegnare dei semplici rettangoli usando un canvas.

A quel punto puoi creare un metodo della classe il quale, passandogli il valore specificato, si occuperà di ridisegnare/colorare i rettangoli attraverso un ciclo.

Questo a grandi linee.
 

alexius85

Nuovo Utente
30 Apr 2020
7
0
1
Non ho mai programmato una app android e questa è la prima per me.. Io al massimo usavo c++ anni fa a scuola.. Riguardo cmq alla classe non so cosa sia in realtà.. Una funzione o procedura? Per quanto riguarda i rettangoli preferisco usare immagini in modo che se poi voglio migliorare la grafica poi un giorno, mi basterà sostituire il png nella cartella drawable del progetto.. Avevo anche provato a usare dei rettangoli fatti con lo shape ma non mi piaceva come venivano. Grazie
 

WmbertSea

Utente Attivo
28 Nov 2014
178
27
28
Fammi capire, hai iniziato a sviluppare già qualcosa o hai solo l'idea di base e sei fermo a quella?

Ok c++ ma hai mai sviluppato qualcosa in java?

Riguardo cmq alla classe non so cosa sia in realtà..
Abbi pazienza ma tu pensa che la prima versione di c++ era chiamata proprio "c con classi". Sono nozioni di fondamentale importanza riguardo la programmazione object oriented.

Anche java rientra in questa categoria. Per ciò che hai intenzione di fare penso sia necessario conoscere tali nozioni, a prescindere dallo sviluppo di app android.

A questo punto, usare o non usare un array mi pare un problema minimo o quantomeno secondario.

Se hai già iniziato a fare qualcosa, e hai dei dubbi su come proseguire, prova a postare ciò a cui sei arrivato, magari ti si può consigliare qualcosa. Diversamente viene difficile poterti aiutare.
 

alexius85

Nuovo Utente
30 Apr 2020
7
0
1
Questo il codice da me scritto riguardante questo pezzo di programma. Ovviamente ho messo solo una parte perche' questo e' ripetuto per piu' "progressbar". Cmq riguardo alla classe mi ero confuso io prima... Mi ero appena svegliato e non connettevo XD

Codice:
public class Main extends AppCompatActivity {

    boolean a, b, c, d;
    float misura;
    int a1, b1, c1, d1;
    int[] pb1={R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff};
    int[] pb2={R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff};
    int[] pb3={R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff};
    int[] pb4={R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff};
    

    misura = //valore da formula
    a1 = 0;
    b1 = 0;
    c1 = 0;
    d1 = 0;
    a = false;
    b = false;
    c = false;
    d = false;
    if (misura <= 90){
        b1 = Math.round((misura/90) * 10);
        a1 = 10 - b1;
        for (int i=0; i<b1; i++) {
            pb2[i]=R.drawable.ledon;
        }
        for (int i=0; i<a1; i++) {
            pb1[i]= R.drawable.ledon;
        }
        a = true;
    }
    [...]
     if (a=true) {
        //disegna pb1
        for (int i=0; i<a1; i++) {
            System.out.print(pb1[i]);
        }
           //disegna pb2
        for (int i=0; i<b2; i++) {
            System.out.print(pb2[i]);
        }
    }
    [...]
 

alexius85

Nuovo Utente
30 Apr 2020
7
0
1
Questo il codice da me scritto riguardante questo pezzo di programma. Ovviamente ho messo solo una parte perche' questo e' ripetuto per piu' "progressbar". Cmq riguardo alla classe mi ero confuso io prima... Mi ero appena svegliato e non connettevo XD

Codice:
public class Main extends AppCompatActivity {

    boolean a, b, c, d;
    float misura;
    int a1, b1, c1, d1;
    int[] pb1={R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff};
    int[] pb2={R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff};
    int[] pb3={R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff};
    int[] pb4={R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff, R.drawable.ledoff};
    

    misura = //valore da formula
    a1 = 0;
    b1 = 0;
    c1 = 0;
    d1 = 0;
    a = false;
    b = false;
    c = false;
    d = false;
    if (misura <= 90){
        b1 = Math.round((misura/90) * 10);
        a1 = 10 - b1;
        for (int i=0; i<b1; i++) {
            pb2[i]=R.drawable.ledon;
        }
        for (int i=0; i<a1; i++) {
            pb1[i]= R.drawable.ledon;
        }
        a = true;
    }
    [...]
     if (a=true) {
        //disegna pb1
        for (int i=0; i<a1; i++) {
            System.out.print(pb1[i]);
        }
           //disegna pb2
        for (int i=0; i<b2; i++) {
            System.out.print(pb2[i]);
        }
    }
    [...]
 

WmbertSea

Utente Attivo
28 Nov 2014
178
27
28
Ovviamente ho messo solo una parte perche' questo e' ripetuto per piu' "progressbar"
Ciao, è proprio questo il motivo per cui pensavo avessi creato una classe. L'uso di codice ripetuto in quel modo è sintomo di una cattiva programmazione.

A parte questo, continuo a non vedere la necessità di inserire quei valori dentro degli array. Dal momento che il dato utile è semplicemente il valore della formula (il quale determina lo stato della progress bar) e che devi comunque eseguire un ciclo per variare ogni singola immagine fino a quel valore, non vedo quindi l'utilità di passare per un array.

Penso sia sufficiente un unico ciclo, per le 10 posizioni, dove vai a disegnare direttamente l'opportuna immagine di ciascuna posizione, secondo il valore della formula.
 

alexius85

Nuovo Utente
30 Apr 2020
7
0
1
Ok esaresti così gentile da farmi un esempio? poi volevo capire come fare per far sì che quelle barre vengano messe sempre nella stessa posizione, a livello grafico proprio..
 

WmbertSea

Utente Attivo
28 Nov 2014
178
27
28
Ok esaresti così gentile da farmi un esempio?
Chiarisco che non sono troppo esperto ma provo ad elaborare qualcosa se riesco, non ti garantisco comunque nulla.

poi volevo capire come fare per far sì che quelle barre vengano messe sempre nella stessa posizione, a livello grafico proprio..
Dovresti poter definire il layout attraverso i file xml, quello principale "activity_main.xml" ed eventuali Fragments.
Magari vedi qualche guida, non ne ho da consigliarti ma prova a fare qualche guida o magari attendi eventuali risposte da altri utenti più esperti.
 
  • Like
Reactions: alexius85