nathan nathan - 1 year ago 55
Android Question

Rectangle shape with two solid colors

I'd like to create a rectangle shape with two solid colors (horizontally) to achieve something like this:

enter image description here

I heard about

, i though i could use it to contains two rectangle with a different color but it seems that it only lays shapes vertically.

Is there a way to achieve this using lalyer-list or should i use something totally different? I'd like to keep it simple with ability to change the shape colors at runtime.


Answer Source

You can create custom drawable for this. Just extend Drawable class.

Here is a sample code which draws a rectangle like you wanted, you can provide any number of colors.

public class ColorBarDrawable extends Drawable {

    private int[] themeColors;

    public ColorBarDrawable(int[] themeColors) {
        this.themeColors = themeColors;

    public void draw(Canvas canvas) {

        // get drawable dimensions
        Rect bounds = getBounds();

        int width = bounds.right - bounds.left;
        int height = bounds.bottom -;

        // draw background gradient
        Paint backgroundPaint = new Paint();
        int barWidth = width / themeColors.length;
        int barWidthRemainder = width % themeColors.length;
        for (int i = 0; i < themeColors.length; i++) {
            canvas.drawRect(i * barWidth, 0, (i + 1) * barWidth, height, backgroundPaint);

        // draw remainder, if exists
        if (barWidthRemainder > 0) {
            canvas.drawRect(themeColors.length * barWidth, 0, themeColors.length * barWidth + barWidthRemainder, height, backgroundPaint);


    public void setAlpha(int alpha) {

    public void setColorFilter(ColorFilter cf) {


    public int getOpacity() {
        return PixelFormat.OPAQUE;