web-dev-qa-db-ja.com

キャンバス上の以前の描画を消去する方法は?

背景画像(地図)があり、そこに定期的に「ここにいる」アイコンを描画する必要があります。 Canvasを使用して、マップの上にアイコンを描画します。ボタンのクリックで描画プロセスがトリガーされると仮定すると(以下のコードを参照)、以前の描画を消去するにはどうすればよいですか?

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);
}
22
springrolls
46
Caner
canvas.drawColor(0, Mode.CLEAR);
19
Maxim
overlayBitmap.eraseColor(Color.TRANSPARENT);

これは単に既存のビットマップをすべて透明に設定するだけです。

7
renrip

キャンバスに色または画像を入力するだけです。

canvas.drawColor(Color.BLACK);

特定の要素を保持し、特定の要素を削除する場合は、これらをArrayListに保存できます。次に、必要に応じてこのArrayListの要素を追加および削除し、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);
}
2
Matt K

以下のようにしてみてください。キャンバスを完全にクリアするために使用できます。

宣言は次のようにする必要があります

ArrayList<Pair<Path, Paint>> paths = new ArrayList<Pair<Path, Paint>>();
ArrayList<Pair<Path, Paint>> undonePaths = new ArrayList<Pair<Path, Paint>>();

そして使用をクリアしながら

    undonePaths.clear();
    paths.clear();
    invalidate();
1
user3009917
canvas.drawColor(0, PorterDuff.Mode.CLEAR);

詳細については ここをクリック

0
Pankaj Lilan

これを手助けする関数を書きました。通常、ページが変更されたかどうかを確認するブール値を設定し、変更されている場合は、returnブール値を使用してこの関数を呼び出し、新しいページのブール値を設定します。

    private boolean clearCanvas(Canvas canvas){
      canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
      return false;
    }

Color.TRANSPARENTはこれでは実際には必要ありません。

0
jrende