Как стереть предыдущий рисунок на холсте? - PullRequest
21 голосов
/ 05 августа 2011

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

Ответы [ 7 ]

46 голосов
/ 05 августа 2011
canvas.drawColor(0, Mode.CLEAR);

Подробнее http://developer.android.com/guide/topics/graphics/index.html

18 голосов
/ 05 августа 2011
canvas.drawColor(0, Mode.CLEAR);
6 голосов
/ 08 марта 2012
overlayBitmap.eraseColor(Color.TRANSPARENT);

Это просто устанавливает существующее растровое изображение на все прозрачное.

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

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

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);
}
1 голос
/ 24 ноября 2013

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

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

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();
0 голосов
/ 04 января 2017

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

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

Color.TRANSPARENT на самом деле не нуженв этом вы можете обойтись без.

0 голосов
/ 09 декабря 2016
canvas.drawColor(0, PorterDuff.Mode.CLEAR);

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

...