Я пытаюсь добавить опцию UNDO в мое приложение, чтобы пользователь мог удалить нарисованный bitmap
из canvas
Когда я нажимаю кнопку «Отменить», я хочу удалить текущее растровое изображение, которое является bitmap
число 3 , и когда оно будет удалено, я снова нажму на кнопку отмены, чтобы набрать bitmap
число 2 должен быть удален, пока я не удалю все bitmaps
Я могу получить координаты и растровое изображение каждого растрового изображения, нарисованного на холсте, приведенный ниже код не работает, когда я пытаюсь нажать кнопку Отменить, все bitmaps
удалены.
кнопка отмены:
//check if the list of points is not empty, means something already drawn on the canvas
if (MainActivity.this.drawView.points.size() > 0)
i = 0;
undo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (MainActivity.this.drawView.points.size() > 0) {
x = drawView.points.get(i).x;
y = drawView.points.get(i).y;
prevBitmap = drawView.points.get(i).bt;
drawView.enableErase(true,x,y,prevBitmap);
i++;
}
}
});
DrawView:
@SuppressLint("CommitPrefEdits")
public DrawView(Context context) {
super(context);
setFocusable(true);
setFocusableInTouchMode(true);
setOnTouchListener(this);
this.paint.setColor(Color.TRANSPARENT);
this.paint.setAntiAlias(true);
this.mContext = context;
this.prefs = this.mContext.getSharedPreferences("MyGamePreferences", 0);
this.prefEditor = this.prefs.edit();
this.prefEditor.putString("font", "f");
this.prefEditor.apply();
}
public void onDraw(Canvas canvas) {
this.ch = getHeight();
this.cw = getWidth();
if (!erase)
for (Point point : this.points) {
canvas.drawBitmap(point.bt, point.x, point.y, null);
}
}
public void drawSingleEmoji(MotionEvent motionEvent, Bitmap singleBitmap) {
this.bt1 = singleBitmap;
this.bt2 = Bitmap.createScaledBitmap(bt1, w, h, true);
Point point = new Point();
point.x = motionEvent.getX() - ((float) (this.bt2.getWidth() / 2));
point.y = motionEvent.getY() - ((float) (this.bt2.getHeight() / 2));
point.bt = this.bt2;
this.points.add(point);
invalidate();
}
public boolean onTouch(View view, MotionEvent motionEvent) {
String str = "grpEmoji";
this.s = this.prefs.getString("font", str);
String str2 = this.s;
float x, y = 0, x1, y1;
if ((motionEvent.getAction() == MotionEvent.ACTION_DOWN)) {
x = motionEvent.getX();
y = motionEvent.getY();
} else if ((motionEvent.getAction() == MotionEvent.ACTION_UP)) {
x1 = motionEvent.getX();
y1 = motionEvent.getY();
if (y1 > y) {
if (str2 != null) {
if (str2.equals("grpEmoji")) {
drawSingleEmoji(motionEvent, bitSingle);
} else if (str2.equals("generatedEmoji")) {
drawSingleEmoji(motionEvent, bitSingle);
} else {
if (bitSingle != null)
drawSingleEmoji(motionEvent, bitSingle);
}
}
}
}
return true;
}
public void enableErase(boolean isEraseEnabled, float x, float y, Bitmap bitmap) {
erase = isEraseEnabled;
bitmap.eraseColor(Color.TRANSPARENT);
invalidate();
}
}
Может кто-нибудь помочь мне решить эту проблему, я потратил целый день, чтобы сделать это, но безрезультатно, спасибо заранее