11

次のようなものを実現するために、(水平方向に) 2 つの単色で四角形を作成したいと思います。

ここに画像の説明を入力

について聞いたことlayer-listがありますが、それを使用して異なる色の2つの長方形を含めることができましたが、形状を垂直にしか配置できないようです。

lalyer-list を使用してこれを達成する方法はありますか、それともまったく別のものを使用する必要がありますか? 実行時に形状の色を変更できるようにして、シンプルに保ちたいと思います。

ありがとう。

4

3 に答える 3

10

このためのカスタム ドローアブルを作成できます。Drawable クラスを拡張するだけです。

これは、希望どおりの長方形を描画するサンプル コードです。任意の数の色を指定できます。

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;
    }

}
于 2013-07-13T13:39:18.000 に答える
1

これにより、2 つの色が縦半分ずつ表示されます。このコードをdrawableリソースに入れます。

<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>
于 2016-08-09T17:50:01.313 に答える