背景画像(地図)があり、そこに定期的に「ここにいる」アイコンを描画する必要があります。 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);
}
canvas.drawColor(0, Mode.CLEAR);
詳細 http://developer.Android.com/guide/topics/graphics/index.html
canvas.drawColor(0, Mode.CLEAR);
overlayBitmap.eraseColor(Color.TRANSPARENT);
これは単に既存のビットマップをすべて透明に設定するだけです。
キャンバスに色または画像を入力するだけです。
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);
}
以下のようにしてみてください。キャンバスを完全にクリアするために使用できます。
宣言は次のようにする必要があります
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();
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
詳細については ここをクリック
これを手助けする関数を書きました。通常、ページが変更されたかどうかを確認するブール値を設定し、変更されている場合は、returnブール値を使用してこの関数を呼び出し、新しいページのブール値を設定します。
private boolean clearCanvas(Canvas canvas){
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
return false;
}
Color.TRANSPARENTはこれでは実際には必要ありません。