我正在使用onDispatchDraw(Canvas canvas)方法在视图中绘制线条。当我调用canvas.drawLine()时,它总是在我的所有视图之上绘制线条。有没有办法在一个按钮下画线,但在我的布局中使用canvas.drawLine()在另一个视图的顶部?
我尝试过以下操作,但它仍然在按钮上划线。
Button b;
RelativeLayout r;
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
Paint p = new Paint();
p.setColor(Color.Black);
canvas.drawLine(0,0,100,100,p);
r.removeView(b);
r.addView(b);
}
答案 0 :(得分:3)
你正试图重新发明轮子。 Z-ordering已在窗口管理子系统中实现,您可以使用它。
android:clickable="false"
或setClickable(false)
dispatchDraw()
。答案 1 :(得分:1)
绘制线后调用super.dispatchDraw()
。 dispatchDraw由viewgroup
调用以绘制其子项,因此在您的情况下,调用super.dispatchDraw()
将首先绘制按钮,然后您在其上绘制线。以dispatchDraw
这样做:
class myListViewWithLine extends ListView {
....
@Override
protected void dispatchDraw(Canvas canvas) {
Paint p = new Paint();
p.setColor(Color.Black);
canvas.drawLine(0,0,100,100,p);
super.dispatchDraw(canvas);
}
....
}
答案 2 :(得分:0)
另一种方法是在按钮下添加一个高度和背景颜色为1的视图。它应该看起来像一条线。
View v = new View(this);
ViewGroup.LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT,1);
v.setLayoutParams(lp);
v.setBackgroundColor(Color.WHITE);
addView(v,INDEX NUMBER AFTER THE BUTTON);