2012-04-30 28 views
6

Chcę mieć pasek postępu z 2 wskaźnikami.Pasek postępu z 2 wskaźnikami

Jeden wskaźnik pokazuje postęp zadania A w kolorze zielonym, drugi wskaźnik pokazuje postęp zadania B na czerwono, wszystko w jednym pasku postępu. Reszta pokazuje pozostałe zadania A i B.

Czy istnieje (proste) rozwiązanie, aby to osiągnąć? Przeczytałem dokumentację, ale nie znalazłem pomocy.

Odpowiedz

9

Można to zrobić, kodując dwa wskaźniki jako postęp podstawowy i postęp wtórny tego samego paska postępu.

utwórz podklasę dla paska postępu.

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); 

    } 

} 

Wpis XML na pasku postępu musi być określane za pomocą tej klasy sub.

<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" /> 

teraz utworzyć rozciągliwej w katalogu zasobów

<?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> 

Kolory dla wskaźników podstawowych i średnich mogą być zmieniane w tym rozciągliwej.

użycie uczynić z nich w kodzie tak:

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

2 krótkie pytania: 'android: id = "@ android: id/secondaryProgress"', czy powinno być ' android: id = "@ + id/secondaryProgress" '? I po co tworzyć podklasę? Tworzysz prywatne pole, ale go nie używasz. –

+0

Zignoruj ​​pierwsze pytanie, mam to: Musisz ustawić identyfikator z zestawu Android, aby pozwolić ProgressBar wiedzieć, który kształt użyć. –

2

Wykonaj niestandardowy layuout i umieść w nim dwa paski postępu. Następnie musisz manipulować pasmami postępu, uzyskując ich uchwyt. Jeśli jest to powiadomienie, musisz ustawić go jako widok zdalny.

+2

nie rozumiem co masz na myśli – user1324936