2011-08-15 9 views
2

Android(v3.0 Honeycomb)APIデモFingerPaint(API> = 11)を変更して、最後に描画されたパスを削除する作業中の消去オプションを追加しようとしています。Android FingerPaintデモではどのように描画されたパスを消去できますか

APIデモでの消去はうまくいきません。バージョン3.0では、v3.1でパスが部分的にしか消去されないブラックボックスが描画されます(解決されたかどうかは不明です) v3.2 [英国のXoomデバイス用ではない])。次のように

私のコードは次のとおりです。

public void eraseLastPath() { 
    if (!mPaths.isEmpty()) { 
     mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 
     mCanvas.drawPath(mPaths.pop(), mPaint); 
     invalidate(); 
    } 
} 

このやや動作しますが、キャンバスに描かれたパスのアウトラインを残します。例えば私は何をしないのです enter image description here

enter image description here

はこのように見えるように消去されます。この

?パスを消去するには良い方法はありますか?

ご迷惑をおかけして申し訳ありません。

おかげ

ジョー

+0

@ルミス問題を引き起こしていたmPaint.setAntiAlias(true)を設定しました。あなたが質問に答えたいなら、私はそれを正しいとマークし、それをアップアップして名言を得るでしょう。 –

答えて

3

mPaintアンチエイリアスをオンに設定してください。

編集:

パスを消去するための適切な方法は、ArrayListのにすべてのストロークを格納し、不要なものを削除して、すべてを再描画することです。この問題で使用された方法は実際にはパスを削除するのではなく、別の色を描くようなものですが、アンチエイリアスは最初の色と同じように機能しません。

各パスは、カラー、ペイント、フィルタなどが格納された新しいクラス「ストローク」のメンバオブジェクトである必要があります。このようにして、すべての図面を復元することができ、無限の元に戻すことができます。

+0

です。よく設定されたアンチエイリアスをオフにします。 ;) –

+0

私はそれがアンチエイリアスと関係があると思いましたが、この効果を引き起こしていたかどうかはわかりませんでした。 xferモードを使わない方が簡単で、消去時にパスの色を背景色に変えるのは簡単ではないでしょうか?この場合、アンチエイリアスをオンにしておくことができます。 – Lumis

1

は、描画のために別々に(Bitmap上に描画されません)(S)最後に描画Pathを持ちます。これにより、Pathを操作して裏地にコミットすることができます。例えば

private List<Path> undoablePaths;  

@Override 
protected void onDraw(Canvas canvas) { 
    for(Path path : undoablePaths){ 
     canvas.drawPath(path, pathPaint); 
    } 
    canvas.drawBitmap(mainBitmap, 0, 0, bitmapPaint); 
} 

private void undoLast(){ 
    undoablePaths.remove(undoablePaths.size() - 1); 
    invalidate(); 
} 

注:の例では、複数の色を許可しません。 Pathオブジェクトを拡張し、その上に色情報を保持するだけです(それに応じてPaintを設定します)。

ハニカムデバイスでこれを使用している場合は、ハードウェアアクセラレーションを有効にしてからandroid:hardwareAccelerated="true"に設定してください。

+0

高速応答のおかげで、それは確かに描画されたパスを処理する別の方法ですが、LumisはPaintオブジェクトのアンチエイリアスが私の特定の問題の原因だと指摘しました。再度、感謝します。 –

+0

「元に戻す」ではありません。根底にあるパスについて考えてみましょう。 –

+0

私はそれを行う適切な方法だと思う - 私はオブジェクトとしてパスのリストを使用することはありませんPaintStrokeのような新しいクラスのリストは、Pathオブジェクトではなく、パスを拡張するよりも、様々な設定などパブリックメソッド。これにより、ストロークを簡単に操作できます。 – Lumis

関連する問題