Наложение изображений на MapView и обновление его положения при изменении масштаба - PullRequest
3 голосов
/ 06 октября 2011

У меня есть список GeoPoints, соответствующих маршруту.Я создал класс для рисования изображения звезды png в начальной точке и флага F1 (meta.png) в конечной точке.

public class MapTestActivity extends MapActivity {
...
class Marcador extends com.google.android.maps.Overlay {
        @Override
        public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {
            super.draw(canvas, mapView, shadow);                   

            //---translate the GeoPoint to screen pixels---
            Point screenPts = new Point();
            mapView.getProjection().toPixels(ruta.get(0), screenPts);

            //---add the marker---
            Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.start);            
            canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);   

            // Otra vez para la meta:
          //---translate the GeoPoint to screen pixels---
            screenPts = new Point();
            mapView.getProjection().toPixels(ruta.get(ruta.size()-1), screenPts);

            //---add the marker---
            bmp = BitmapFactory.decodeResource(getResources(), R.drawable.meta);            
            canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null); 

            return true;
        }
        }
...
}

В методе onCreate я продолжаю так:

public class MapTestActivity extends MapActivity {
...
 private List<GeoPoint> ruta;
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        MapView mapView = (MapView)findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);

        MapController mc = mapView.getController();

        ruta = new ArrayList<GeoPoint>();

        ruta.add(new GeoPoint((int) (43.30782*1E6), (int) (-5.69379*1E6)));
        ruta.add(new GeoPoint((int) (43.30785*1E6), (int) (-5.69435*1E6)));
        ruta.add(new GeoPoint((int) (43.30832*1E6), (int) (-5.69422*1E6)));
        ruta.add(new GeoPoint((int) (43.30894*1E6), (int) (-5.69538*1E6)));

        mc.animateTo(ruta.get(0));
        mc.setZoom(10);


        // PNG images:
        Marcador marcadoresSalidaYMeta = new Marcador();
        List<Overlay> listOfOverlays = mapView.getOverlays();
        listOfOverlays.clear();
        listOfOverlays.add(marcadoresSalidaYMeta);

        mapView.invalidate();
        }
...
}

Изображения появляются над картой, но они появляются только в правильных координатах, когда масштабирование достигает максимального значения.Когда я уменьшаю масштаб, они неточные и появляются далеко от своего места.

Как я могу заставить их перемещаться в нужную точку при каждом изменении масштаба?И почему они подходят для максимального значения масштабирования, если я начинаю со значения 10?

...