Rectangle shape with two solid colors

后端 未结 3 2063
北荒
北荒 2021-02-14 12:52

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

\"enter

相关标签:
3条回答
  • 2021-02-14 13:08

    This will give you two colors half and half vertically. Put this code in a drawable resource.

    <item
        android:top="320dip">
        <shape
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle" >
            <solid android:color="@color/red" />
        </shape>
    </item>
    <item android:bottom="320dip">
        <shape
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:shape="rectangle" >
            <solid android:color="@color/yellow" />
        </shape>
    </item>
    
    0 讨论(0)
  • 2021-02-14 13:18

    this will surely draw the shape as per your Requirement :

    Adjust size of <item> as you need !

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <item
            android:left="50dip">
            <shape
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:shape="rectangle" >
                <solid android:color="#0000FF" />
            </shape>
        </item>
        <item android:right="50dip">
            <shape
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:shape="rectangle" >
                <solid android:color="#ff0000" />
            </shape>
        </item>
    
    </layer-list>
    
    0 讨论(0)
  • 2021-02-14 13:25

    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;
        }
    
        @Override
        public void draw(Canvas canvas) {
    
            // get drawable dimensions
            Rect bounds = getBounds();
    
            int width = bounds.right - bounds.left;
            int height = bounds.bottom - bounds.top;
    
            // 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++) {
                backgroundPaint.setColor(themeColors[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);
            }
    
        }
    
        @Override
        public void setAlpha(int alpha) {
        }
    
        @Override
        public void setColorFilter(ColorFilter cf) {
    
        }
    
        @Override
        public int getOpacity() {
            return PixelFormat.OPAQUE;
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题