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);
}
canvas.drawColor(0, Mode.CLEAR);
Plus d'infos http://developer.Android.com/guide/topics/graphics/index.html
canvas.drawColor(0, Mode.CLEAR);
overlayBitmap.eraseColor(Color.TRANSPARENT);
Cela définit simplement un bitmap existant sur tout transparent.
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);
}
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();
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
Pour plus d'informations Cliquez ici
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.