如何访问MyLocationOverlay的画布?



我覆盖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()方法并使用保存的状态来增强绘图例程。

相关内容

  • 没有找到相关文章

最新更新