0

我有一个 LinearLayout,我想以编程方式设置背景。这个背景应该很简单,就是两个并排的长方形。矩形的宽度仅在运行时才知道。最好的方法是什么?

    ShapeDrawable done = new ShapeDrawable(new RectShape());
    done.setBounds(new Rect(0, 0, 0, 0));
    done.getPaint().setColor(Color.GREEN);

    ShapeDrawable remaining = new ShapeDrawable(new RectShape());
    remaining.setBounds(new Rect(20, 0, 0, 0));
    remaining.getPaint().setColor(Color.RED);

    LayerDrawable composite = new LayerDrawable(new Drawable[]{remaining, done});
    weightRow.setBackgroundDrawable(composite); 

我试图创建一个像这样的复合可绘制对象,我希望剩余的矩形从位置 20 开始,但它只是填充了整个布局。

4

2 回答 2

1

我会回答我自己的问题。在阅读了更多帖子后,我意识到,从 xml drawable 模拟 android:top, left, ... 您应该使用 LayerDrawable 的 setLayerInset(int index, int l, int t, int r, int b)要移动的图层。

ShapeDrawable done = new ShapeDrawable();
done.getPaint().setColor(Color.GREEN);

ShapeDrawable remaining = new ShapeDrawable(new RectShape());
remaining.getPaint().setColor(Color.RED);

LayerDrawable composite = new LayerDrawable(new Drawable[]{done, remaining});
composite.setLayerInset(1, 0, 0, 100, 0);

layout.setBackgroundDrawable(composite);
于 2013-05-21T08:23:25.400 回答
0

您可以创建一个扩展的自定义类ShapeDrawable。实现该onDraw()方法来定义它应该如何绘制自己;您不能使用CanvasPaintAPI 以编程方式绘制矩形区域。然后,您可以定义一种方法来在运行时设置这些区域的宽度。

在您的Activity中,创建此类的新实例并调用setBackgroundDrawable().LinearLayout

于 2013-05-20T21:57:20.193 回答