webentwicklung-frage-antwort-db.com.de

Wie lösche ich die vorherige Zeichnung auf Canvas?

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);
}
21
springrolls
canvas.drawColor(0, Mode.CLEAR);

Weitere Informationen http://developer.Android.com/guide/topics/graphics/index.html

46
Caner
canvas.drawColor(0, Mode.CLEAR);
18
Maxim
overlayBitmap.eraseColor(Color.TRANSPARENT);

Dadurch wird eine vorhandene Bitmap einfach auf alle transparent gesetzt.

6
renrip

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);
}
2
Matt K

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();
1
user3009917
canvas.drawColor(0, PorterDuff.Mode.CLEAR);

Für mehr Infos hier klicken

0
Pankaj Lilan

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.

0
jrende