2011-12-05 29 views
1

私のコードがこの場合、キャンバスに描かれた画像をどのように削除しますか?ここで削除プロセスはどこに置かれますか?私はcanvas.drawColor(Color.BLACK);を使ってみましたが、動作しません。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; 
} 
} 

答えて

1

常にあなたが描画動作に影響を与えるだろうクリップを設定していないことを確認してください。..あなたのPaintオブジェクトで

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

このコードの後ですか? public SingleTouchEventView(コンテキストコンテキスト、AttributeSet attrs){ super(context、attrs); – user1081908

+0

ありがとう!!それは助けた:) – nithinreddy

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

または

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

これを試してみてください。

+0

こんにちは!ありがとう:)私はどこcanvas.drawColor具体的に配置できますか?私はすでにこれを試していますが、うまくいきません:( – user1081908

+0

@ user1081908答えを – slayton

+0

の私の編集を参照してください。あなたのonDrawメソッドの最初のコマンドとして配置してください。 –

1

invalidate()(または別のスレッドからpostInvalidate())が呼び出されると、onDraw()が続いて画像の全体領域を再描画するために呼び出されます。 onDraw()に渡されたCanvasオブジェクトは、すでに空白のビットマップでバックアップされています。

これはあなたの質問に直接答えるものではないことを認識していますが、あなたの質問を読んで、invalidate()onDraw()で起こるイベントの順序を誤解しているのではないかと、毎回Canvasを削除する必要はありません。

あなたがしていることは、画面MotionEventを表すPathベクトルを構築しようとしているようです。あなたのコードを見ると、Pathオブジェクトのすべてのセグメントをクリアすることで、描画されたすべてのグラフィックスを消去することができます。

+0

ありがとうございました。しかし、私はなぜinvalidateが動作しないのかわかっていないか、それは私のアプリでうまくいくでしょう。私が望むのは、画像を描いた後です。その画像は、画面をタップして別の画像を描くと削除されます。 – user1081908

2

古いスレッド私は知っていますが、APIの指紋デモでうんざりしていて、キャンバスをクリアしたいのですが、ソリッドカラーで塗りつぶしたくありませんでした(背景がありました)。上の@ coder_For_Life22上のビルド私は以下の方法を含む:

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

    //Schedule redraw() 
    invalidate(); 
} 
関連する問題