我覆盖MyLocationOverlay的drawMyLocation,将箭头显示为标记,而不是正常的蓝点。但是,我还需要根据手机的传感器更改指针所指向的方向。我决定在onSensorChanged中调用drawMyLocation。但是调用drawMyLocation所需的参数之一是Canvas。如何访问MyLocationOverlay的Canvas?或者我是否需要创建一个新的Canvas并在每次调用onSensorChanged中的drawMyLocation时传递新的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;
}
答案 0 :(得分:1)
您不应该在draw()方法之外访问画布。如果您发现自己需要绘图或使用画布,则应覆盖draw()方法。
使用onSensonrChanged方法将当前方向或传感器信息保存到类状态,然后覆盖draw()方法并使用保存状态来增强绘图例程。