package ca.etsmtl.applets.etsmobile.views; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.widget.ProgressBar; import java.util.ArrayList; import java.util.List; /** * Created by imad on 18/01/15. */ public class MultiColorProgressBar extends ProgressBar { private List<ProgressItem> mProgressItemsList = new ArrayList<ProgressItem>(); public MultiColorProgressBar(Context context) { super(context); } public MultiColorProgressBar (Context context, AttributeSet attrs) { super(context, attrs); } public MultiColorProgressBar (Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public void addProgressItem(ProgressItem item) { mProgressItemsList.add(item); } public void clearProgressItems() { mProgressItemsList.clear(); } @Override protected void onDraw(Canvas canvas) { int progressBarWidth = getWidth(); int progressBarHeight = getHeight(); int lastProgressX = 0; int progressItemWidth, progressItemRight; super.onDraw(canvas); for (int i = 0; i < mProgressItemsList.size(); i++) { ProgressItem progressItem = mProgressItemsList.get(i); Paint progressPaint = new Paint(); Rect progressRect = new Rect(); progressPaint.setColor(getResources().getColor(progressItem.color)); progressItemWidth = (int) (progressItem.percentage * progressBarWidth / 100); progressItemRight = lastProgressX + progressItemWidth; // for last item give right of the progress item to width of the // progress bar if (i == mProgressItemsList.size() - 1 && progressItemRight != progressBarWidth) { progressItemRight = progressBarWidth; } progressRect.set(lastProgressX, 0, progressItemRight, progressBarHeight); canvas.drawRect(progressRect, progressPaint); lastProgressX = progressItemRight; } } }