Lekensteyn
Lekensteyn

Reputation: 66405

How do I draw a line in a LinearLayout containing other views?

I've created a bar that is supposed to contain multiple views of different colors. A line has to be drawn that indicates the current position in the bar. Below is my simplified code:

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

Now, this does not seem to work. No matter if I swap the canvas.drawLine with super.onDraw, the line is not visible unless I remove the view.setBackgroundResource. How can I draw a line over the LinearLayout. I'd rather not use FrameLayout if possible.

Below are pictures of what I'm trying to achieve (adding a white line) on top of the bars (note: the white bar on the first picture is just exaggerated big for clearness on SO):

bar

bar 2

Upvotes: 1

Views: 1376

Answers (1)

Reuben Scratton
Reuben Scratton

Reputation: 38707

Override dispatchDraw() instead of onDraw(). You want to draw the line after the child views draw (which isn't in super.onDraw).

Upvotes: 3

Related Questions