MyLocationOverlayのdrawMyLocationをオーバーライドして、通常の青い点の代わりにマーカーとして矢印を表示します。ただし、電話のセンサーによっては、ポインターが指す方向も変更する必要があります。onSensorChanged内でdrawMyLocationを呼び出すことにしました。ただし、drawMyLocationを呼び出すために必要なパラメーターの1つはCanvasです。MyLocationOverlayのキャンバスにアクセスするにはどうすればよいですか?または、onSensorChanged内でdrawMyLocationを呼び出すたびに、新しいCanvasを作成して新しいCanvasを渡す必要がありますか?
以下は、drawメソッドをオーバーライドしようとしたときのコードです。ただし、継続的に実行されていることがわかりますが、回転したビットマップが表示されるまでに時間がかかります。
**更新:マップをタッチしようとすると、マップをタッチすると矢印が回転するのがわかります。ただし、触らないと矢印が方向を更新するのに時間がかかります。
public boolean draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow, long when)
{
Log.v("Message", "Executing draw method...");
boolean result;
result = super.draw(canvas, mapView, shadow, when);
if(geoLastFix != null) //geoLastFix contains the GeoPoint of my Location.
{
Point screenPts = mapView.getProjection().toPixels(geoLastFix, null);
//rotate bitmap
Bitmap arrowBitmap = marker;
Matrix matrix = new Matrix();
matrix.postRotate(orientation);
Bitmap rotatedBmp = Bitmap.createBitmap(
arrowBitmap,
0, 0,
arrowBitmap.getWidth(),
arrowBitmap.getHeight(),
matrix,
true
);
//print bitmap to canvas
canvas.drawBitmap(
rotatedBmp,
screenPts.x - (rotatedBmp.getWidth() / 2),
screenPts.y - (rotatedBmp.getHeight() / 2),
null
);
}
return result;
}