我有一个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);
我试图像这样创建一个复合drawable,我希望剩余的矩形从位置20开始,但它只是填充整个布局。
答案 0 :(得分:1)
我会回答我自己的问题。在阅读了更多帖子之后,我意识到,模拟android:top,left,...来自xml drawable,你应该使用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);
答案 1 :(得分:0)
您可以创建一个扩展ShapeDrawable
的自定义类。实现onDraw()
方法来定义它应该如何绘制自己;您无法使用Canvas
和Paint
API以编程方式绘制矩形区域。然后,您可以定义一种方法,以便在运行时设置这些区域的宽度。
在Activity
中,制作此课程的新实例,并在setBackgroundDrawable()
上致电LinearLayout
。