2012-04-30 23 views
6

Quiero tener barra de progreso con 2 indicadores.Barra de progreso con 2 indicadores

Un indicador muestra el progreso de la tarea A en color verde, el segundo indicador muestra el progreso de la tarea B en rojo, todo en una barra de progreso. El resto muestra el resto de las tareas A y B.

¿Existe una solución (simple) para lograr esto? Leí la documentación pero no encontré ayuda.

Respuesta

9

Esto se puede hacer codificando los dos indicadores como el progreso primario y el progreso secundario de la misma barra de progreso.

crea una subclase para la barra de progreso.

public class TextProgressBar extends ProgressBar { 
    private Paint textPaint; 

    public TextProgressBar(Context context) { 
     super(context); 
     textPaint = new Paint(); 
     textPaint.setColor(Color.BLACK); 
    } 

    public TextProgressBar(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     textPaint = new Paint(); 
     textPaint.setColor(Color.BLACK); 
     setMax(30); 
     setProgress(12); 
     setSecondaryProgress(20); 

    } 

} 

La entrada XML de la barra de progreso debe consultarse utilizando esta subclase.

<com.darsh.doubleProgressBar.TextProgressBar 
    android:id="@+id/progressBar1" 
    style="?android:attr/progressBarStyleHorizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="15sp" 
    android:layout_marginLeft="1sp" 
    android:layout_marginRight="1sp" 
    android:layout_marginTop="10sp" 
    android:progressDrawable="@drawable/progress" /> 

crear ahora la dibujable en el directorio de recursos

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

<item android:id="@android:id/background"> 
    <shape> 
     <corners android:radius="5dip" /> 

     <gradient 
      android:angle="270" 
      android:centerColor="#ff5a5d5a" 
      android:centerY="0.75" 
      android:endColor="#ff747674" 
      android:startColor="#ff5a5d5a" /> 
    </shape> 
</item> 
<item android:id="@android:id/secondaryProgress"> 
    <clip> 
     <shape> 
      <corners android:radius="5dip" /> 


      <gradient 
       android:angle="270" 
       android:centerColor="#32cd32" 
       android:centerY="0.75" 
       android:endColor="#32cd32" 
       android:startColor="#32cd32" /> 
     </shape> 
    </clip> 
</item> 
<item android:id="@android:id/progress"> 
    <clip> 
     <shape> 
      <corners android:radius="5dip" /> 

      <gradient 
       android:angle="270" 
       android:endColor="#33B5E5" 
       android:startColor="#33B5E5" /> 
     </shape> 
    </clip> 
</item> 
</layer-list> 

Los colores de los indicadores primarios y secundarios se pueden cambiar en este estirable.

Hacer uso de ellos en su código como este:

TextProgressBar textProgress; 
textProgress = (TextProgressBar)findViewById(R.id.progressBar1); 
textProgress.setMax(100); 
textProgress.setProgress(10); // 
textProgress.setSecondaryProgress(50); //green 
+0

2 preguntas rápidas: 'android: id = "@ android: Identificación/secondaryProgress" ', debe ser que' android: id = "@ + id/secondaryProgress" '? ¿Y por qué crear una subclase? Usted crea un campo privado, pero no lo usa. –

+0

Ignore la primera pregunta, la obtuve: debe configurar el ID del conjunto de Android para que el ProgressBar sepa qué forma usar. –

2

Haz un layuout personalizado y pon las dos barras de progreso en él. Entonces necesitas manipular las barras de progreso obteniendo su manejador. Si es para una notificación, debe configurarlo como una Vista remota.

+2

que no entiendo lo que quiere decir – user1324936