OnDraw方法隐藏了上一个绘图

时间:2014-04-18 12:51:49

标签: android android-drawable

我对Android很新,我正在创建一个小应用程序,我可以在自定义视图上绘制矩形和圆形。

我想要做的是当按下圆圈按钮时我想绘制圆圈,当按下矩形按钮时我想绘制一个矩形。

但是我遇到的问题是当我按下圆形按钮时它会正确地绘制圆圈,但是当我点击矩形按钮并尝试绘制它时,它隐藏了之前绘制的圆形并绘制了一个矩形。如果我再次选择圆圈并绘制它,它将隐藏矩形并绘制一个圆圈。

MainActivity.java :按下按钮时,会调用buttonPressed方法:

private DrawingView drawView;

public void buttonPressed(View v)
{
  String shape = v.getTag().toString();
  if(shape.equals("circle"))
  {         
    Log.e("button pressed", "circle");
    drawView.setValue("circle");            
  }
  else if(shape.equals("rect"))
  {
     Log.e("button pressed", "rect");
     drawView.setValue("rect");
  }     
} 

在我的 DrawingView 类的onDraw方法中我正在做:

@Override
protected void onDraw(Canvas canvas) 
{
  if(testValue.equals("rect"))
  {
     // draw rectangle
  }
  else if(testValue.equals("circle"))
  {
    // draw circle
  }
}

// setter method to set value
public void setValue(String val) 
{
  testValue = val;
}

有关如何处理这种情况的任何建议?

1 个答案:

答案 0 :(得分:0)

Android视图会在调用onDraw()之前自动清除其画布,因此您必须执行以下两项操作之一:

  1. 保留要绘制的项目列表,在按下按钮时添加到列表中,并在onDraw()上迭代它。这很容易实现,但如果列表变长,可能会减慢绘制过程。这发生在UI线程上,所以要小心。

  2. 使用与View大小相匹配的私有位图制作自己的Canvas,并在按下按钮时绘制它。在onDraw()中,使用drawBitmap()将缓冲区复制到View上。