Effacer le canevas avec Canvas.drawColor ()
je suis d'essayer de changer l'image de fond d'un Affichage personnalisé avec un certain succès. l'image va changer, mais le problème est que j'ai encore voir les traces de l'ancienne image. lorsque je tente de l'effacer de la toile avant de dessiner la nouvelle image, il ne semble pas fonctionner. j'ai créer une image bitmap pour stocker l'image. lors de la modification de l'image, je l'appelle la Toile.drawColor() avant de dessiner la nouvelle image, mais l'ancienne image persiste. j'ai essayé drawColor(0), drawColor(de Couleur.NOIR), c.drawColor(0, PorterDuff.Mode.CLAIR), et aucun des travaux ci-dessus. en tant que tel, j'ai dû poster ce depuis plus expérimentés esprit que le mien.
le code est comme suit:
private int bgnd;
private boolean switching;
public void setBgnd(int incoming){
switching = true;
switch (incoming){
case R.drawable.image1:
bgnd = incoming;
this.invalidate();
break;
case R.drawable.image2:
bgnd = incoming;
this.invalidate();
break;
}
}
protected void onDraw(Canvas c){
if(switching == true){
Bitmap b = BitmapFactory.decodeResource(getResources(), bgnd);
c.drawColor(0, PorterDuff.Mode.CLEAR);
c.drawBitmap(b, 0, 0, null);
switching = false;
}else{
Bitmap b = BitmapFactory.decodeResource(getResources(), bgnd);
c.drawBitmap(b, 0, 0, null);
}
}
source d'informationauteur Prmths | 2011-01-10
Vous devez vous connecter pour publier un commentaire.
Tout comme vous, j'ai eu du mal comment effacer un calque du haut/surfaceview dans ma couche multiple/surfaceview app. Après 2 jours de recherche et de codage, j'ai trouvé ma propre voie, et c'est ainsi que j'ai effacé une toile avant de dessiner, vous pouvez l'utiliser lorsque le fait d'avoir plusieurs calques/surfaceviews. Le calque d'arrière-plan ne sera pas couvert de noir, c'est le truc.
Vous n'avez pas besoin d'appeler invalidate() dans votre méthode onDraw, de sorte que les modifications effectuées dans ce onDraw sont mis à jour sur l'écran?
La invalidate() dans votre commutateur appelle votre onDraw après l'appel de setBgnd, mais il n'y a rien dire pour redessiner après que vous avez apporté des modifications à la Toile.
Vous pouvez utiliser de la Toile de la méthode
drawRGB
.