Я перезаписываю drawMyLocation MyLocationOverlay для отображения стрелки в качестве маркера вместо обычной синей точки. Однако мне также нужно изменить направление, на которое указывает указатель, в зависимости от датчика телефона. Я решил вызвать drawMyLocation внутри onSensorChanged. Но одним из параметров, необходимых для вызова drawMyLocation, является Canvas. Как я могу получить доступ к холсту MyLocationOverlay? Или мне нужно создать новый Canvas и передавать новый Canvas каждый раз, когда я вызываю drawMyLocation внутри onSensorChanged?
Ниже приведен мой код, когда я пытался переопределить метод рисования. Однако, несмотря на то, что я вижу, что оно постоянно выполнялось, отображение повернутого растрового изображения занимает некоторое время.
** ОБНОВЛЕНИЕ: Если я пытаюсь коснуться моей карты, я могу видеть, как моя стрелка вращается, когда я касаюсь карты. Однако, если я не коснусь его, стрелке потребуется некоторое время, чтобы обновить ее направление.
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;
}