我使用RelativeLayout
来绝对定位一些标准视图(如TextView
)。
我想要做的是在此RelativeLayout
的Canvas
上绘制一个自定义线条,该线条绘制在它所有其他子视图的后面。
这些其他子视图是通过显式定义RelativeLayout.LayoutParams
添加的,但我想让我的自定义线条决定何时绘制自己。
我尝试将此行包装在一个带有重载的CustomView中:View.onDraw(Canvas canvas)
方法并简单地添加视图而不指定任何LayoutParams
,所以:
public class CustomView extends View {
public CustomView(Context context, int x0, int y0, int x1, int y1) {
super(context);
setClickable(false);
setBackgroundColor(Color.TRANSPARENT);
}
public void onDraw(Canvas canvas) {
Log.i("myapp", "i'm not called! :(")
Paint p = new Paint();
p.setColor(Color.BLACK);
canvas.drawLine(x0, y0, x1, y1, p);
}
}
使用方法:
CustomView v = new CustomView(MyActivity.this, 0, 0, 100, 100);
relativeLayout.addView(v);
...但是这个onDraw
方法从来没有被调用。
有办法让它起作用吗?
编辑:如果我替换为:
relativeLayout.addView(v)
使用
relativeLayout.addView(v,
new RelativeLayout.LayoutParams(SOME_WIDTH, SOME_HEIGHT));
关键是,此时我既不知道SOME_WIDTH
,也不知道SOME-HEIGHT
。