在Android中撤销/重做画布上绘制的形状,可以通过以下步骤实现:
以下是一个简单示例代码,用于在Android中实现撤销/重做绘制操作:
public class MyDrawingView extends View {
private List<Shape> shapes; // 保存绘制的形状
private Stack<Shape> undoStack; // 撤销栈
private Stack<Shape> redoStack; // 重做栈
public MyDrawingView(Context context) {
super(context);
shapes = new ArrayList<>();
undoStack = new Stack<>();
redoStack = new Stack<>();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
for (Shape shape : shapes) {
shape.draw(canvas);
}
}
public void addShape(Shape shape) {
shapes.add(shape);
undoStack.push(shape);
redoStack.clear(); // 新增绘制操作后清空重做栈
invalidate(); // 重新绘制
}
public void undo() {
if (!undoStack.isEmpty()) {
Shape shape = undoStack.pop();
redoStack.push(shape);
invalidate(); // 重新绘制
}
}
public void redo() {
if (!redoStack.isEmpty()) {
Shape shape = redoStack.pop();
undoStack.push(shape);
invalidate(); // 重新绘制
}
}
}
public abstract class Shape {
public abstract void draw(Canvas canvas);
}
// 示例:绘制一个矩形形状
public class RectangleShape extends Shape {
private int left, top, right, bottom;
public RectangleShape(int left, int top, int right, int bottom) {
this.left = left;
this.top = top;
this.right = right;
this.bottom = bottom;
}
@Override
public void draw(Canvas canvas) {
Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawRect(left, top, right, bottom, paint);
}
}
在上述示例中,MyDrawingView
是自定义的View类,用于绘制形状。Shape
是形状的抽象类,可以根据需要扩展其他形状(例如圆形、线条等)。addShape()
方法用于添加新的形状,并将其记录到历史记录和绘制列表中。undo()
和redo()
方法用于执行撤销和重做操作。
这只是一个简单的示例,您可以根据具体需求进行修改和扩展。对于更复杂的绘图应用,可能需要考虑更高级的撤销/重做管理,例如支持多层撤销/重做、保存绘图历史到文件等。
领取专属 10元无门槛券
手把手带您无忧上云