1

異なる色の複数のビューを含むことになっているバーを作成しました。バー内の現在の位置を示す線を引く必要があります。以下は私の簡略化されたコードです:

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.drawLineん。LinearLayoutの上に線を引くにはどうすればよいですか。可能であれば、FrameLayoutを使用したくありません。super.onDrawview.setBackgroundResource

以下は、バーの上に私が達成しようとしていること(白い線を追加)の写真です(注:最初の写真の白いバーは、SOの明確さのために大きく誇張されています):

バー

バー2

4

1 に答える 1

3

onDraw() の代わりに dispatchDraw() をオーバーライドします。子ビューが描画された後に線を描画したい(これは super.onDraw にはありません)。

于 2012-04-11T10:38:34.063 に答える