我覆盖MyLocationOverlay的drawMyLocation以显示一个箭头作为标记,而不是普通的蓝点。然而,我还需要根据手机的传感器来改变指针指向的方向。我决定在SensorChanged上调用drawMyLocation。但是调用drawMyLocation所需的参数之一是Canvas。如何访问MyLocationOverlay的画布?还是每次在SensorChanged内部调用drawMyLocation时,我都需要创建一个新画布并传递新画布?
下面是我尝试重写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;
}
您不应该在draw()方法之外访问画布。如果你发现自己需要绘图或使用画布,你应该覆盖draw()方法。
使用onSensonrChanged方法将当前方向或传感器信息保存到类状态中,然后覆盖draw()方法并使用保存的状态来增强绘图例程。