在android中的视图下绘制线条

时间:2011-09-20 18:43:26

标签: android view line android-canvas z-order

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

3 个答案:

答案 0 :(得分:3)

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

  1. 创建您想要绘制的自定义视图。
  2. 使用android:clickable="false"setClickable(false)
  3. 使其无法点击
  4. 使其背景透明并实施dispatchDraw()
  5. 在视图层次结构中将您不想绘制的所有视图放在此视图上方。

答案 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);