如何访问MyLocationOverlay的画布?

时间:2012-02-03 07:15:38

标签: android google-maps compass-geolocation mylocationoverlay

我覆盖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;
}

1 个答案:

答案 0 :(得分:1)

您不应该在draw()方法之外访问画布。如果您发现自己需要绘图或使用画布,则应覆盖draw()方法。

使用onSensonrChanged方法将当前方向或传感器信息保存到类状态,然后覆盖draw()方法并使用保存状态来增强绘图例程。