如何在android中删除paintview到surfaceview

时间:2012-03-16 08:52:27

标签: android android-layout

这里我需要删除paint.I我使用surfaceview.inside擦除按钮我使用下面的代码。现在,当我点击“擦除”按钮时,绘制的颜料全部被删除。但是现在再次绘制意味着油漆不可见。请任何人帮助我。

  public void onClick(View view){
    if(view==erasebtn)
           {
               if (!currentDrawingPath.isEmpty()) {
       currentPaint .setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
        action=true;
    }
             }
}

1 个答案:

答案 0 :(得分:0)

如果要完全删除所有绘图,则必须使用“空”颜色填充它。

假设你有一个画画:

canvas.drawColor(Color.WHITE);

如果您在Canvas中绘制了线条等,而您只是一直添加绘图,那么您需要创建一种方法来恢复旧版本。更改用于绘制内容的Paint不会改变您已绘制的内容。它只影响未来绘图的完成方式。

有几种可能性,例如以下应该有效:

Bitmap bitmap = Bitmap.createBitmap(400, 400, null);
Canvas canvas = new Canvas(bitmap);
ByteBuffer buffer = ByteBuffer.allocate(bitmap.getByteCount());

//save the state
bitmap.copyPixelsToBuffer(buffer);

// draw something
canvas.drawLine();

// restore the state
bitmap.copyPixelsFromBuffer(buffer):

这样你可以回到1状态。如果您需要撤消更多步骤,请考虑将位图保存到磁盘,否则会消耗相当多的内存。

另一种可能性是将您以数字方式绘制的所有步骤保存在列表中(如矢量图形),以便可以将整个图像重绘到某个点 - 然后您只需通过绘制即可撤消绘图列表的第一部分是新图像。

修改:如果您将其添加到代码并使用它代替undo(),它会有效吗?

// add me to the code that has undo()
public void undoAll (){  
  final int length = currentStackLength();  
  for (int i = lenght - 1; i >= 0; i--) {
    final DrawingPath undoCommand = currentStack.get(  i  );  
    currentStack.remove( i );
    undoCommand.undo();  
    redoStack.add( undoCommand );  
  }
}