2010-02-23 21 views
8

Me gustaría que el color de la barra de progreso (específicamente el progreso secundario que se actualiza con setSecondaryProgress) cambie dinámicamente en el tiempo de ejecución cuando cruza un cierto punto.¿Cómo se puede actualizar dinámicamente el color de una SeekBar?

Ya puedo sustituir mi propio drawable en la barra durante la función onCreate de mi actividad (cambiando el color de amarillo a verde) llamando a setProgressDrawable y sustituyendo un recurso que he copiado de la versión predeterminada de Android de un progreso horizontal (SDK/plataformas/android-2.1/data/res/drawable/progress_horizontal.xml). Sin embargo, al actualizar esto en tiempo de ejecución (sí, desde el subproceso de la interfaz de usuario a través de AsyncTask), la barra de progreso completa a excepción de la pestaña emergente se vuelve negra o transparente.

+0

Uno de los enfoques que se me ocurre es utilizar un selector de visualización entre dos seekbars con diferentes colores, pero si el usuario está utilizando el control de seguimiento en ese tiempo, esto no funcionará – PseudoNoise

+0

A partir de las horas de oficina de IRC, experimentó con el uso de invalidateDrawable en vano. También intenté leer los valores de los dibujables, pero cada objeto (los dos colores de los recursos y getProgressDrawable después de configurarlo) tienen diferentes valores hash. – PseudoNoise

Respuesta

2

Creo que esto es lo que busca

enter image description here

enter image description here

enter image description here

Esto puede ser achived mediante la creación de drwables personalizados para el fondo y el progreso de la barra seak Ver este link de código de ejemplo.

pls considera los siguientes enlaces también http://javatechig.com/android/android-seekbar-example/

Change the color of a seekbar on onProgressChanged

+0

¡Sí! Mi pregunta es anterior a la pregunta vinculada por varios años, pero estoy feliz de finalmente tener una respuesta (aunque me mudé de este proyecto). – PseudoNoise

-1

Una SeekBar es una extensión de ProgressBar que agrega un pulgar que se puede arrastrar. El usuario puede tocar el pulgar y arrastrar hacia la izquierda o hacia la derecha para establecer el nivel de progreso actual o usar las teclas de flecha.

Cuando SeekBarChange, se llama a onProgressChanged() de OnSeekBarChangeListener, y el fondo de la pantalla (LinearLayout) se actualizará de acuerdo con el valor (SeekBar.getProgress()).

main.xml

+1

Esto no tiene relación con la pregunta. El OP preguntó acerca de actualizar el color, y ni una vez mencionas nada sobre el color. – 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

Eso establece el color de la pantalla debido a lo que es la barra de progreso. Lo que pregunté es cómo establecer el color de fondo de la barra de progreso, no toda la pantalla. – PseudoNoise

Cuestiones relacionadas