web-dev-qa-db-fra.com

Comment effacer un dessin précédent sur Canvas?

J'ai une image de fond (une carte) sur laquelle je dois régulièrement dessiner l'icône tu-es-ici. J'utilise Canvas pour dessiner l'icône en haut de la carte. En supposant que le processus de dessin soit déclenché par un clic sur un bouton (voir le code ci-dessous), comment puis-je effacer le dessin précédent?

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);

Plus d'infos http://developer.Android.com/guide/topics/graphics/index.html

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

Cela définit simplement un bitmap existant sur tout transparent.

6
renrip

Il suffit de remplir la toile avec une couleur ou une image:

canvas.drawColor(Color.BLACK);

Si vous souhaitez conserver certains éléments et les supprimer, vous pouvez les stocker dans une liste de tableaux. Vous pouvez ensuite ajouter et supprimer des éléments de cet ArrayList quand vous le souhaitez, puis les parcourir dans 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);
}
2
Matt K

Essayez comme ci-dessous, il peut être utilisé pour effacer totalement la toile.

La déclaration devrait être comme ça,

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

et en effaçant l'utilisation

    undonePaths.clear();
    paths.clear();
    invalidate();
1
user3009917
canvas.drawColor(0, PorterDuff.Mode.CLEAR);

Pour plus d'informations Cliquez ici

0
Pankaj Lilan

J'ai écrit une fonction pour aider avec ceci. Habituellement, je configure un booléen pour vérifier si la page a changé. Si c'est le cas, j'appelle cette fonction, en utilisant le booléen de retour pour définir mon booléen newpage.

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

Color.TRANSPARENT n’est pas vraiment nécessaire à cet égard, vous pouvez le faire sans.

0
jrende