Ich habe ein Hintergrundbild (eine Karte), auf das ich regelmäßig das Symbol "Sie sind hier" zeichnen muss. Ich benutze Canvas, um das Symbol über der Karte zu zeichnen. Angenommen, der Zeichnungsvorgang wird beim Klicken auf die Schaltfläche ausgelöst (siehe Code unten), wie kann ich die vorherige Zeichnung löschen?
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);
Weitere Informationen http://developer.Android.com/guide/topics/graphics/index.html
canvas.drawColor(0, Mode.CLEAR);
overlayBitmap.eraseColor(Color.TRANSPARENT);
Dadurch wird eine vorhandene Bitmap einfach auf alle transparent gesetzt.
Füllen Sie einfach die Leinwand mit einer Farbe oder einem Bild:
canvas.drawColor(Color.BLACK);
Wenn Sie bestimmte Elemente beibehalten und bestimmte Elemente wegnehmen möchten, können Sie diese in einer ArrayList speichern. Anschließend können Sie Elemente zu dieser ArrayList hinzufügen und entfernen, wenn Sie möchten, und dann in onDraw () durchlaufen.
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);
}
Versuchen Sie es wie unten beschrieben, um die Leinwand vollständig zu löschen.
Deklaration sollte so sein,
ArrayList<Pair<Path, Paint>> paths = new ArrayList<Pair<Path, Paint>>();
ArrayList<Pair<Path, Paint>> undonePaths = new ArrayList<Pair<Path, Paint>>();
und während der Verwendung zu löschen
undonePaths.clear();
paths.clear();
invalidate();
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
Für mehr Infos hier klicken
Ich habe dazu eine Funktion geschrieben. Normalerweise richte ich einen Boolean ein, um zu überprüfen, ob sich die Seite geändert hat. Wenn dies der Fall ist, rufe ich diese Funktion auf und verwende den Boolean return, um meine neue Seite boolean festzulegen.
private boolean clearCanvas(Canvas canvas){
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
return false;
}
Color.TRANSPARENT ist in diesem Fall nicht wirklich nötig.