2010-02-23 17 views
8

Mi piacerebbe avere il colore della barra di avanzamento (in particolare il progresso secondario che viene aggiornato con setSecondaryProgress) per cambiare dinamicamente in fase di esecuzione quando attraversa un determinato punto.Come è possibile aggiornare dinamicamente il colore di una SeekBar?

Sono già in grado di sostituire il mio drawable nella barra durante la funzione onCreate della mia attività (cambiando colore da giallo a verde) chiamando setProgressDrawable e sostituendo una risorsa che ho copiato dalla versione Android predefinita di un avanzamento orizzontale (SDK/piattaforme/android-2.1/dati/res/drawable/progress_horizontal.xml). Tuttavia, l'aggiornamento di questo al momento dell'esecuzione (sì, dal thread dell'interfaccia utente tramite un AsyncTask) causa l'intera barra di avanzamento, ad eccezione del thumbtab, che diventa nero o trasparente.

+0

Un approccio mi viene in mente è quello di utilizzare uno switcher vista tra due seekbars con colori diversi, ma se l'utente utilizza il controllo di tracking in quel tempo, questo non funzionerà. – PseudoNoise

+0

A partire dagli orari d'ufficio di IRC proprio ora, abbiamo provato a utilizzare invalidateDrawable senza alcun risultato. Ho anche provato a leggere i valori dei drawable ma ogni oggetto (i due colori delle risorse e getProgressDrawable dopo averlo impostato) hanno tutti valori hash diversi. – PseudoNoise

risposta

2

Penso che questo è quello che stai cercando

enter image description here

enter image description here

enter image description here

Questo dopo possono essere realizzate mediante la creazione di drwables personalizzati per lo sfondo e il progresso del bar seak Vedere questo link per codice di esempio.

Pls vede i link qui sotto anche http://javatechig.com/android/android-seekbar-example/

Change the color of a seekbar on onProgressChanged

+0

Sì! La mia domanda precede la domanda collegata da diversi anni, ma sono felice di avere finalmente una risposta (anche se sono passato da questo progetto). – PseudoNoise

-1

A SeekBar è un'estensione di ProgressBar che aggiunge un pollice trascinabile. L'utente può toccare il pollice e trascinare a sinistra oa destra per impostare il livello di avanzamento corrente o utilizzare i tasti freccia.

Quando SeekBarChange, l'onProgressChanged() di OnSeekBarChangeListener sarà chiamato, e lo sfondo dello schermo (LinearLayout) verrà aggiornato in base al valore (SeekBar.getProgress()).

main.xml

+1

Questo non è completamente correlato alla domanda. L'OP ha chiesto informazioni sull'aggiornamento del colore e non una volta si parla di colore. – lrAndroid

1

SeekColorActivity.java

package com.exercise.seekcolor; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.LinearLayout; 
import android.widget.SeekBar; 

public class SeekColorActivity extends Activity { 

private int seekR, seekG, seekB; 
SeekBar redSeekBar, greenSeekBar, blueSeekBar; 
LinearLayout mScreen; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mScreen = (LinearLayout) findViewById(R.id.myScreen); 
    redSeekBar = (SeekBar) findViewById(R.id.mySeekingBar_R); 
    greenSeekBar = (SeekBar) findViewById(R.id.mySeekingBar_G); 
    blueSeekBar = (SeekBar) findViewById(R.id.mySeekingBar_B); 
    updateBackground(); 

    redSeekBar.setOnSeekBarChangeListener(seekBarChangeListener); 
    greenSeekBar.setOnSeekBarChangeListener(seekBarChangeListener); 
    blueSeekBar.setOnSeekBarChangeListener(seekBarChangeListener); 

} 

private SeekBar.OnSeekBarChangeListener seekBarChangeListener 
= new SeekBar.OnSeekBarChangeListener() 
{ 

@Override 
public void onProgressChanged(SeekBar seekBar, int progress, 
    boolean fromUser) { 
// TODO Auto-generated method stub 
updateBackground(); 
} 
@Override 
public void onStartTrackingTouch(SeekBar seekBar) { 
// TODO Auto-generated method stub 
} 

@Override 
public void onStopTrackingTouch(SeekBar seekBar) { 
// TODO Auto-generated method stub 
} 
}; 

private void updateBackground() 
{ 
seekR = redSeekBar.getProgress(); 
seekG = greenSeekBar.getProgress(); 
seekB = blueSeekBar.getProgress(); 
mScreen.setBackgroundColor(
    0xff000000 
    + seekR * 0x10000 
    + seekG * 0x100 
    + seekB 
); 
} 
} 
+1

Imposta il colore dello schermo a causa della barra di avanzamento. Quello che ho chiesto è come impostare il colore di sfondo della barra di avanzamento, non l'intero schermo. – PseudoNoise

Problemi correlati