Ответ 1
canvas.drawColor(0, Mode.CLEAR);
Дополнительная информация http://developer.android.com/guide/topics/graphics/index.html
У меня есть фоновое изображение (карта), на котором мне нужно регулярно рисовать значок 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);
}
canvas.drawColor(0, Mode.CLEAR);
Дополнительная информация http://developer.android.com/guide/topics/graphics/index.html
canvas.drawColor(0, Mode.CLEAR);
overlayBitmap.eraseColor(Color.TRANSPARENT);
Это просто устанавливает существующее Bitmap для всех прозрачных.
Я использую это, чтобы "очистить" объект Bitmap, который я использую для наложения поверх другого, чтобы показать окно обрезки.Просто заполните холст цветом или изображением:
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);
}
Попробуйте, как показано ниже, его можно использовать для полного удаления холста.
Декларация должна быть такой:
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();
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
Для получения дополнительной информации Нажмите здесь
Я написал функцию, чтобы помочь с этим. Обычно я настраиваю логическое значение, чтобы проверить, изменилась ли страница, если она есть, я вызываю эту функцию, используя возвращаемое логическое значение для установки моей новой страницы в буле.
private boolean clearCanvas(Canvas canvas){
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
return false;
}
Color.TRANSPARENT на самом деле не нужен, вы можете сделать это.
Попробуйте удалить представление в onPause() действия и добавить onRestart()
LayoutYouAddedYourView.addView(YourCustomView); LayoutYouAddedYourView.removeView(YourCustomView);
В момент добавления вашего представления вызывается метод onDraw().
YourCustomView, это класс, который расширяет класс View.