如何在包含其他视图的LinearLayout中绘制线条?

时间:2012-04-11 10:28:18

标签: android android-layout

我创建了一个应该包含不同颜色的多个视图的条形图。必须绘制一条线,指示条形图中的当前位置。以下是我的简化代码:

public class Abar extends LinearLayout {
    final Paint line_paint = new Paint();
    private Context context;

    public Abar(Context context) {
        super(context);
        this.context = context;
        line_paint.setColor(Color.WHITE);
        setWeightSum(2000);
        setBackgroundResource(R.color.blue);

        View view = new View(context);
        view.setBackgroundResource(R.color.yellow);
        this.addView(view, new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 1000));
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawLine(20, 80, 100, 80, line_paint);
    }
}

现在,这似乎不起作用。无论我是否将canvas.drawLinesuper.onDraw交换,除非我删除view.setBackgroundResource,否则该行不可见。如何在LinearLayout上绘制一条线。如果可能的话,我宁愿不使用FrameLayout。

下面是我想要实现的图片(添加白线)的图片(请注意:第一张图片上的白色条形图只是夸大了SO的清晰度):

bar

bar 2

1 个答案:

答案 0 :(得分:3)

覆盖dispatchDraw()而不是onDraw()。您希望在子视图绘制之后绘制行(不在super.onDraw中)。