Удалить предыдущее растровое изображение с холста - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь добавить опцию UNDO в мое приложение, чтобы пользователь мог удалить нарисованный bitmap из canvas

enter image description here

Когда я нажимаю кнопку «Отменить», я хочу удалить текущее растровое изображение, которое является 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();
}

}

Может кто-нибудь помочь мне решить эту проблему, я потратил целый день, чтобы сделать это, но безрезультатно, спасибо заранее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...