2012-09-07 54 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谢谢 –