0

我正在使用 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);
}
4

3 回答 3

4

你正在尝试重新发明轮子。Z-ordering 已经在窗口管理子系统中实现,您可以使用它。

  1. 创建要绘制的自定义视图。
  2. android:clickable="false"使用或使其不可点击setClickable(false)
  3. 使其背景透明并实现dispatchDraw()
  4. 将您不想在此视图上方绘制的所有视图放在视图层次结构中。
于 2011-09-23T14:08:45.830 回答
2

super.dispatchDraw()画线后调用。调用 dispatchDrawviewgroup以绘制其子项,因此在您的情况下,调用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);
    }
....
}
于 2011-09-24T07:52:55.363 回答
0

另一种方法是在按钮下添加一个具有 1 dip 作为高度和背景颜色的视图。它应该看起来像一条线。

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);
于 2011-09-23T12:45:12.810 回答