2015-06-01 154 views
1

我试图在我的应用程序中实现撤消和重做。我正在阅读其他问题和论坛,但代码不适合我。我只在这里发布相关的代码,以便于阅读,因为我绘制了不同的形状。对于重做和撤消,我在另一个活动中有两个按钮,我在每个按钮的onclicklistener中调用函数redo或undo。撤消和重做画布

private void setupDrawing(){ 
    drawPath=new Path(); 

    //Set up paint 

    paths.add(drawPaint); 
} 

public boolean onTouchEvent(MotionEvent event){ 
    tX=event.getX(); 
    tY=event.getY(); 
    switch(event.getAction()){ 
     case MotionEvent.ACTION_DOWN: 

      //Action move down 

     break; 
     case MotionEvent.ACTION_MOVE: 

      //Action move 

     break; 
     case MotionEvent.ACTION_UP: 
      drawCanvas.drawCircle(x, y, radius, drawPaint); //Example of drawing object 
      drawPath = new Path(); 
      paths.add(drawPath); 
     break; 
     default: 
      return false; 
    } 
    invalidate(); 
    return true; 
}  

public void undo(){ 
    if(paths.size()>0){ 
     undonePaths.add(paths.remove(paths.size()-1)); 
     invalidate(); 
    } 
    if(undo==true){ 
     undo=false; 
    }else{ 
     undo=true; 
    } 
} 

public void redo(){ 
    if(undonePaths.size()>0){ 
     paths.add(undonePaths.remove(undonePaths.size()-1)); 
     invalidate(); 
    } 
    if(redo==true){ 
     redo=false; 
    }else{ 
     redo=true; 
    } 
} 

回答

0

我发现我的代码有问题。我在画布上绘画,我需要将这些形状添加到路径中。如果有人需要,我在这里留下代码。

protected void onDraw(Canvas canvas){ 
    for(Path p : paths){ 
     canvas.drawPath(p, drawPaint); 
    } 
    canvas.drawPath(drawPath, drawPaint); 
} 

//Here all the code for the Motion Event. I will show only the Action Up. 

case MotionEvent.ACTION_UP: 
     drawPath.addCircle(x, y, radius, Path.Direction.CCW); //Example of drawing object 
     paths.add(drawPath); 
     drawPath = new Path(); 
    break;