Как получить доступ к холсту MyLocationOverlay? - PullRequest
0 голосов
/ 03 февраля 2012

Я перезаписываю 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;
}

1 Ответ

1 голос
/ 03 февраля 2012

Вы не должны получать доступ к холсту вне метода draw (). Если вам нужно рисовать или использовать холст, вам следует переопределить метод draw ().

Используйте метод onSensonrChanged, чтобы сохранить текущую ориентацию или информацию о датчике в состояние ваших классов, а затем переопределить метод draw () и использовать сохраненное состояние для дополнения вашей процедуры рисования.

...