2011-12-05 1 views
1

Comment est-ce que je supprimerai l'image dessinée sur ma toile si mon code est ceci? Où vais-je mettre le processus de suppression ici? J'ai essayé d'utiliser le canvas.drawColor(Color.BLACK); mais cela ne fonctionne pas.Comment supprimer l'image dessinée dans Canvas?

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawPath(path, paint); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    float eventX = event.getX(); 
    float eventY = event.getY(); 

    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     path.moveTo(eventX, eventY); 
     return true; 
    case MotionEvent.ACTION_MOVE: 
     path.lineTo(eventX, eventY); 
     break; 
    case MotionEvent.ACTION_UP: 
     // nothing to do 
     break; 
    default: 
     return false; 
    } 

    // Schedules a repaint. 
    invalidate(); 
    return true; 
} 
} 

Répondre

1

Essayez avec votre objet peinture ..

Paint paint = new Paint(); 
paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); 
canvas.drawPaint(paint); 
paint.setXfermode(new PorterDuffXfermode(Mode.SRC)); 
+0

est-ce après ce code ?? public SingleTouchEventView (contexte de contexte, AttributeSet attrs) { super (context, attrs); – user1081908

+0

Merci! Il a aidé :) – nithinreddy

1
canvas.drawColor(0xff000000); // i can't see why it should not work except the clip rect mentioned below 

ou

Paint paint = new Paint(); 
paint.setStyle(Style.FILL); 
paint.setColor(0xff000000); // Specify the drawing color here 
canvas.drawRect(0,0,w,h, paint); 

assurez-vous toujours que vous n'avez pas défini un clip qui pourrait influencer le comportement de dessin.

+0

bonjour! merci :) où puis-je placer spécifiquement le canvas.drawColor? parce que je l'ai déjà essayé mais cela ne fonctionne pas :( – user1081908

+0

@ user1081908 voir mon edit de la réponse – slayton

+0

si vous le placez en tant que première commande dans votre méthode onDraw cela devrait fonctionner –

1

Lorsque invalidate() (ou postInvalidate() d'un autre fil) est appelé, par la suite appelé onDraw() est de redessiner toute la zone de l'image. L'objet Canvas qui est passé à onDraw() est soutenu par un bitmap qui est déjà vide.

Je me rends compte que cela ne répond pas directement à votre question, mais à la lecture de votre question, je me demande si vous ne comprenez pas la séquence des événements qui se produisent avec invalidate() et onDraw(), ainsi que le fait qu'on vous donne un blanc Canvas chaque fois ce qui signifie que vous ne devriez pas avoir besoin de l'effacer.

Il me semble que ce que vous faites est que vous essayez de construire un vecteur Path représentant l'écran MotionEvent s. En regardant votre code tel qu'il est, il me semble que vous voudrez peut-être effacer tous les graphiques dessinés en effaçant tous les segments de votre objet Path.

+0

merci beaucoup. mais je ne sais pas pourquoi invalider ne fonctionne pas ou comment cela fonctionnera sur mon application. Ce que je veux, c'est après avoir dessiné une image, cette image sera supprimée une fois que j'appuie sur l'écran et dessiner pour une autre image. – user1081908

2

Vieux fil Je sais, mais je me baladais avec la démo de fingerpaint API et je voulais effacer la toile, mais ne pas remplir de couleur unie (j'avais un fond). S'appuyant sur @ coder_For_Life22 réponse ci-dessus j'ai inclus la méthode suivante:

protected void clear(){ 
    Xfermode x = mPaint.getXfermode(); 
    mPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); 
    mCanvas.drawPaint(mPaint); 
    mPaint.setXfermode(x); 

    //Schedule redraw() 
    invalidate(); 
} 
Questions connexes