2012-09-07 91 views
0

我想要一個有兩種顏色的進度條。有時候我想增加紅色進度和一些綠色的時間。簡單地說,我想將進度條分成兩部分。一個綠色部分和其他紅色,如果我想增加紅色的進展,它會增加紅色和綠色相同。請注意,進度從左側開始。我怎樣才能做到這一點。我知道我應該使用二次進展,但是如何?這是我的代碼和我想要做的。Android進度條水平輔助進度顏色

final float[] roundedCorners = new float[] { 5, 5, 5, 5, 5, 5, 5, 5 }; 
    ShapeDrawable pgDrawable = new ShapeDrawable(new RoundRectShape(
      roundedCorners, null, null)); 

    if (answer == true) { 

     pgDrawable.getPaint().setColor(Color.parseColor(greenColor)); 
     Log.i("green", ": should work"); 

    } else if (answer == false) { 

     pgDrawable.getPaint().setColor(Color.parseColor(redColor)); 
     Log.i("red", ": should work"); 
    } 

    ClipDrawable progress = new ClipDrawable(pgDrawable, Gravity.LEFT, 
      ClipDrawable.HORIZONTAL); 
    progressBarTotal.setProgressDrawable(progress); 

    progressBarTotal.setBackgroundDrawable(getResources().getDrawable(
      android.R.drawable.progress_horizontal)); 

    if (TotalPercent >= 102) { 

     Toast.makeText(ProcessGame.this, "Full", Toast.LENGTH_LONG).show(); 
    } else { 
     progressBarTotal.setProgress(TotalPercent); 

     TotalPercent = (TotalPercent + 1); 

    } 

我不想搞砸xml的東西,如果這可以在java中完成。

+0

當選擇綠色時,它將覆蓋紅色,並增加與紅色相同的進度。 –

回答

0

您可以創建自己的視圖。

public class CustomProgressBar extends View{ 
    public CustomProgressBar(Context context, AttributeSet attribs){ 
     super(context, attribs); 
     float xRadius = 5f, yRadius = = 5f; 

     Paint emptyPaint = new Paint(); 
     emptyPaint.setColor(Color.WHITE); 


     Paint greenPaint = new Paint(); 
     greenPaint.setColor(Color.GREEN); 

     Paint redPaint = new Paint(); 
     redPaint.setColor(Color.RED); 

     Rectf emptyBar = new Rectf(0,0,0,0); 
     Rectf greenBar = new Rectf(0,0,0,0); 
     Rectf redBar = new Rectf(0,0,0,0); 
    } 

    public void setProgress(float greenProgress, float redProgress){ 
     //progress should be between 0f and 1f 
     //but you can change it, just change how the width is calculated 
     emptyBar.set(0,0,getWidth(), getHeight()); 
     greenBar.set(0,0,getWidth() * greenProgress, getHeight()); 
     redBar.set(0,0,getWidth() * redProgress, getHeight()); 
     //force the view to draw again 
     invalidate(); 
    } 

    @Override 
    protected void onDraw(Canvas canvas){ 
     canvas.drawRoundRect(emptyBar, xRadius,yRadius, emptyPaint); 
     canvas.drawRoundRect(greenBar, xRadius,yRadius, greenPaint); 
     canvas.drawRoundRect(redBar, xRadius,yRadius, redPaint); 
    } 
} 

在XML視圖看起來像

<com.mydomain.widgets.CustomProgressBar 
    android:layout_width="fill_parent" 
    android:layout_height="10dip" 
/> 

的代碼只是如何把它做一個例子。可以進行一些改進,例如,可以將視圖的寬度和高度值存儲在局部變量中,以避免始終調用getWidthgetHeight,但只能在特定位置執行此操作,例如在您的活動onWindowFocusChanged內部進行回調,否則getWidth和getHeight將返回0.空欄也可以用適當的值初始化一次以避免每次都設置。

+0

我不能設置二級進度顏色?使用我的代碼? –

+0

@MohsinShafqat只有我發現的東西是[這個](你可以看到它使用xml)(http://stackoverflow.com/questions/6235890/android-progressbar-how-to-set-secondary-color-programmatically) ,我給你的代碼完全可以在不使用xml的情況下完成。 – vikki

+0

我已經完成了它使用自定義xml謝謝 –