我正在扩展 LinearLayout:
public class MyLinearLayout extends LinearLayout {
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(0xFFFF0000);
canvas.drawLine(0, 0, getWidth(), getHeight(), paint);
}
}
如果布局有子元素,上面的红线不应该画在它们上面吗?考虑这样的布局:
<MyLinearLayout>
<ImageView />
</MyLinearLayout>
我希望在子 ImageView 上方绘制红线。但它被绘制在它下面。我假设在 super.onDraw() 行完成后,所有子绘图都会完成。
在所有子绘图完成后,是否有办法到达 Canvas 并在其上绘制一些东西?
谢谢
最佳答案
布局不会绘制,除非您调用 setWillNotDraw(false);
。他们这样做是出于效率原因。
编辑:
onDraw()
实际上只是允许您在绘图操作发生之前修改 Canvas
。它实际上并不绘制。你想要做的是像这样覆盖 draw()
:
@Override
protected void draw(Canvas canvas) {
super.draw(canvas);
Paint paint = new Paint();
paint.setColor(0xFFFF0000);
canvas.drawLine(0, 0, getWidth(), getHeight(), paint);
}
调用 super 将绘制 View 中的所有子项。然后它将绘制所有线条。不过,我仍然相信您需要调用 setWillNotDraw(false)
。
关于android - 在我的 LinearLayout 上画东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10727225/