次のようなものを実現するために、(水平方向に) 2 つの単色で四角形を作成したいと思います。
について聞いたことlayer-list
がありますが、それを使用して異なる色の2つの長方形を含めることができましたが、形状を垂直にしか配置できないようです。
lalyer-list を使用してこれを達成する方法はありますか、それともまったく別のものを使用する必要がありますか? 実行時に形状の色を変更できるようにして、シンプルに保ちたいと思います。
ありがとう。
次のようなものを実現するために、(水平方向に) 2 つの単色で四角形を作成したいと思います。
について聞いたことlayer-list
がありますが、それを使用して異なる色の2つの長方形を含めることができましたが、形状を垂直にしか配置できないようです。
lalyer-list を使用してこれを達成する方法はありますか、それともまったく別のものを使用する必要がありますか? 実行時に形状の色を変更できるようにして、シンプルに保ちたいと思います。
ありがとう。
このためのカスタム ドローアブルを作成できます。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;
}
}
これにより、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>