나는 안드로이드 사용자를위한 그리기 응용 프로그램을 만들고 있습니다. 내 애플 리케이션에 다시 실행 취소 기능을 구현 싶어요. 내 문제를 해결하기 위해 stackoverflow에 게시 된 질문을 언급하고 있지만 내 코드에 맞는 솔루션을 찾을 수 없었습니다. 아래 코드를 게시하고 있습니다.이 문제를 해결할 수 있도록 도와주세요. 모든 도움을 주시면 감사하겠습니다.실행 취소 다시 실행 기능이 작동하지 않습니다.
미리 감사드립니다.
public class DrawingView extends View {
private ArrayList<Path> paths = new ArrayList<Path>();
private ArrayList<Path> undonePaths = new ArrayList<Path>();
public DrawingView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
this.context = context;
setupDrawing();
}
public void setupDrawing(){
drawPath = new Path();
drawPaint = new Paint();
canvasPaint = new Paint(Paint.DITHER_FLAG);
brushSize = getResources().getInteger(R.integer.medium_size);
lastBrushSize = brushSize;
drawPaint.setColor(paintColor);
drawPaint.setAntiAlias(true);
drawPaint.setStrokeWidth(brushSize);
drawPaint.setStyle(Paint.Style.STROKE);
drawPaint.setStrokeJoin(Paint.Join.ROUND);
drawPaint.setStrokeCap(Paint.Cap.ROUND);
paths.add(drawPath);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
//view given size
super.onSizeChanged(w, h, oldw, oldh);
canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
drawCanvas = new Canvas(canvasBitmap);
}
@Override
protected void onDraw(Canvas canvas) {
//draw view
canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
canvas.drawPath(drawPath, drawPaint);
for(Path p : paths){
canvas.drawPath(p, drawPaint);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float touchX = event.getX();
float touchY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// undonePaths.clear();
drawPath.moveTo(touchX, touchY);
break;
case MotionEvent.ACTION_MOVE:
drawPath.lineTo(touchX, touchY);
break;
case MotionEvent.ACTION_UP:
// drawPath.lineTo(touchX, touchY);
drawCanvas.drawPath(drawPath, drawPaint);
drawPath.reset();
drawPath = new Path();
paths.add(drawPath);
break;
default:
return false;
}
invalidate();
return true;
}
public void onClickUndo(){
if(paths.size()>0){
undonePaths.add(paths.remove(paths.size() - 1));
Toast.makeText(getContext(), "Undo is working", Toast.LENGTH_LONG).show();
invalidate();
}
else{
Toast.makeText(getContext(), "Undo is not working", Toast.LENGTH_LONG).show();
}
}
public void onClickRedo(){
if(undonePaths.size()>0){
paths.add(undonePaths.remove(undonePaths.size() - 1));
Toast.makeText(getContext(), "Redo is working", Toast.LENGTH_LONG).show();
invalidate();
}
else{
Toast.makeText(getContext(), "Redo is not working", Toast.LENGTH_LONG).show();
}
}
}
실행 취소를 클릭하면 어떻게됩니까? '실행 취소가 작동하지 않습니다'라고 말하거나 원하지 않는 결과가 있습니까? – CodeCamper