2014-04-13 7 views
6

Sto tentando di cambiare colore in base al valore della barra di ricerca. Mi piacerebbe che i colori appaiano in un'ampia gamma.Modifica del colore in base al valore della barra di ricerca

Ecco quello che ho provato, ma non mi dà i colori che voglio:

seekBarColor.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 
     int progress = 0; 
      @Override 
      public void onProgressChanged(SeekBar seekBar, int progresValue, boolean fromUser) { 
      progress = progresValue; 
      int lower = Color.argb(0xFF,progress*0x10000, progress*0x100, progress)+0xff000000; 
      color.setBackgroundColor(lower); 
      } 

      @Override 
      public void onStartTrackingTouch(SeekBar seekBar) { 

      } 

      @Override 
      public void onStopTrackingTouch(SeekBar seekBar) { 
       db.updateColor(""); 
      } 
    }); 

Tutte le idee?

+0

si desidera ottenere i colori da cerchio di colore? perché con il tuo codice suppongo di avere sfumature grigie –

+0

sì, voglio generare colore da cerchio di colori e sì il mio codice restituisce solo grigio e non riesco a risolverlo –

+0

Quindi usa il colore HSV invece di RGB. Di seguito ho fornito uno snippet di codice. –

risposta

10

Se avete bisogno solo colori brillanti e saturi, utilizzare Color.HSVToColor() invece di impostare R, G e componenti B direttamente:

float[] hsvColor = {0, 1, 1}; 
// generate only hue component in range [0, 360), 
// leaving saturation and brightness maximum possible 
hsvColor[0] = 360f * progress/maxProgress; 
view.setBackgroundColor(Color.HSVToColor(hsvColor)); 

Questo codice impostare il colore a partire da rosso, poi cambiare senza problemi a arancione, giallo, verde, blu e magenta torna al rosso come progress sta cambiando da 0 a maxProgress

+0

a quale valore devo impostare il progresso massimo? –

+0

@SarahSai i tuoi progressi iniziano da 0 e termina a 100, quindi a 100. –

+0

perché non riesco a ottenere valori di colore nero? –

2

È necessario passare i valori da 0 a 255 al metodo Color.argb(int,int,int,int).

Questo potrebbe funzionare?

Color.argb(0xFF, progress, progress, progress) //will return some gray color based on progress. 

Potrebbe essere necessario scalare il valore di avanzamento in base al minimo e il valore massimo. Per esempio, se si dispone di progresso 0-100 allora si dovrebbe calcolare i valori dei colori con progress * 255/100

+0

ma non voglio ottenere solo il grigio, voglio generare tutti i colori dal cerchio di colori –

+0

Bene, non so come funzioni il colore, ma sicuramente devi regolare i valori rosso, verde, blu passati a Funzione 'Color.argb', in base alla posizione in cui l'utente tocca la tua vista. Btw, se si utilizza l'alfa completo, è possibile utilizzare la funzione 'Color.rgb', che restituisce il colore RGB con l'alfa completo (255). – Sipka