Autore Topic: Creare una scala colori in base ad un valore..  (Letto 424 volte)

Offline smartgatto

  • Utente junior
  • **
  • Post: 96
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S5
  • Sistema operativo:
    Windows 7
Creare una scala colori in base ad un valore..
« il: 12 Maggio 2016, 10:45:19 CEST »
0
Ciao a tutti...
vorrei creare una sorta di V-meter che in base ad un valore visualizzi un colore che va dal verde al rosso..
mi spiego meglio...
se il valore va da 0 a 40 vorrei visualizzare il verde, da 40 a 80 il giallo e da 80 in su rosso.
Fino a qua non penso di avere problemi (impostando un if a seconda del valore metto un setBackgroundColor(Color.RED) ad esempio...)
Ma così facendo però si passerebbe dal giallo al rosso all'improvviso, mentre invece io vorrei fare che da un colore all'altro si passi in maniera graduata, non staccando all'improvviso.. non so se mi sono spiegato..
esiste qualche tutorial? grazie!

Edit:
guardando qua e la ho capito che dovrei usare HSB/HSV anzichè RGB, ma non riesco a capire come si usa...
in un sito ho trovato questo esempio (per java):

Codice: [Seleziona]
public Color getColor(double power)
{
    double H = power * 0.4; // Hue (note 0.4 = Green, see huge chart below)
    double S = 0.9; // Saturation
    double B = 0.9; // Brightness

    return Color.getHSBColor((float)H, (float)S, (float)B);
}

ma non so come integrarlo su android... pensavo esistesse qualcosa tipo .setBackgroundColor(Color.HSBColor((float)H, (float)S, (float)B)) ma niente....
« Ultima modifica: 12 Maggio 2016, 11:47:20 CEST da smartgatto »

Offline iClaude

  • Utente normale
  • ***
  • Post: 202
  • Respect: +13
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S5
  • Sistema operativo:
    Windows 10
Re:Creare una scala colori in base ad un valore..
« Risposta #1 il: 12 Maggio 2016, 11:45:59 CEST »
0
Devi naturalmente usare un interpolatore.
Ad esempio potresti usare la classe ARGBEvaluator:
ArgbEvaluator | Android Developers

Post unito: 12 Maggio 2016, 17:57:09 CEST
Questo è un interpolatore che usa il modello HSV:
Codice (Java): [Seleziona]
public Integer evaluate(float fraction,
                          Integer startValue,
                          Integer endValue) {
    float[] startHsv = new float[3];
    float[] endHsv = new float[3];
    float[] currentHsv = new float[3];

    Color.colorToHSV(startValue, startHsv);
    Color.colorToHSV(endValue, endHsv);

    for (int i=0; i<3; i++)
      currentHsv[i] = (1-fraction)*startHsv[i] + fraction*endHsv[i];

    while (currentHsv[0]>=360.0f) currentHsv[0] -= 360.0f;
    while (currentHsv[0]<0.0f) currentHsv[0] += 360.0f;

    return Color.HSVToColor(currentHsv);
  }
« Ultima modifica: 12 Maggio 2016, 17:57:09 CEST da iClaude, Reason: Merged DoublePost »

Offline smartgatto

  • Utente junior
  • **
  • Post: 96
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S5
  • Sistema operativo:
    Windows 7
Re:Creare una scala colori in base ad un valore..
« Risposta #2 il: 16 Maggio 2016, 17:54:10 CEST »
0
Grazie dell'idea! Appena posso ci provo!