Подтвердить что ты не робот

Как стереть предыдущий рисунок на холсте?

У меня есть фоновое изображение (карта), на котором мне нужно регулярно рисовать значок you-are-here. Я использую Canvas, чтобы нарисовать значок поверх карты. Предполагая, что процесс рисования запускается при нажатии кнопки (см. Код ниже), как я могу удалить предыдущий рисунок?

private void displayUserPos(Point userPos) {
    Bitmap marker = BitmapFactory.decodeResource(getResources(), R.drawable.ic_yah);
    canvas.drawBitmap(marker, (float)userPos.getX(), (float)userPos.getY(), null);
    imgView.setImageBitmap(fmOverlay);
}
4b9b3361

Ответ 2

canvas.drawColor(0, Mode.CLEAR);

Ответ 3

overlayBitmap.eraseColor(Color.TRANSPARENT);

Это просто устанавливает существующее Bitmap для всех прозрачных.

Я использую это, чтобы "очистить" объект Bitmap, который я использую для наложения поверх другого, чтобы показать окно обрезки.

Ответ 4

Просто заполните холст цветом или изображением:

canvas.drawColor(Color.BLACK);

Если вы хотите сохранить определенные элементы и удалить определенные элементы, вы можете сохранить их в ArrayList. Затем вы можете добавлять и удалять элементы из этого ArrayList, когда захотите, а затем перебирать их в onDraw().

for (Iterator<GraphicObject> it = _graphics.iterator(); it.hasNext();) {
    GraphicObject graphic = (GraphicObject)it.next();
    coords = graphic.getCoordinates();
    canvas.drawCircle(coords.getX(), coords.getY(), (float)coords.getRadius(), paint);
}

Ответ 5

Попробуйте, как показано ниже, его можно использовать для полного удаления холста.

Декларация должна быть такой:

ArrayList<Pair<Path, Paint>> paths = new ArrayList<Pair<Path, Paint>>();
ArrayList<Pair<Path, Paint>> undonePaths = new ArrayList<Pair<Path, Paint>>();

и при очистке используйте

    undonePaths.clear();
    paths.clear();
    invalidate();

Ответ 6

canvas.drawColor(0, PorterDuff.Mode.CLEAR);

Для получения дополнительной информации Нажмите здесь

Ответ 7

Я написал функцию, чтобы помочь с этим. Обычно я настраиваю логическое значение, чтобы проверить, изменилась ли страница, если она есть, я вызываю эту функцию, используя возвращаемое логическое значение для установки моей новой страницы в буле.

    private boolean clearCanvas(Canvas canvas){
      canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
      return false;
    }

Color.TRANSPARENT на самом деле не нужен, вы можете сделать это.

Ответ 8

Попробуйте удалить представление в onPause() действия и добавить onRestart()

LayoutYouAddedYourView.addView(YourCustomView); LayoutYouAddedYourView.removeView(YourCustomView);

В момент добавления вашего представления вызывается метод onDraw().

YourCustomView, это класс, который расширяет класс View.