MapActivity

Sebastian Stock

Immer wenn eine MapView verwendet wird, muss die betreffende Activity die Klasse MapActivity erweitern. Die MapActivity, welche wiederum von Activity abgeleitet ist, sorgt eigenständig für das Nachladen und Caching der Kartenausschnitte und ist daher zwingend erforderlich.

Mit Methoden der MapView können die Eigenschaften der dargestellten Karten festgelegt werden. So kann beispielsweise eine Satellitenansicht aktiviert oder deaktiviert werden und es können die Straßen mit dazugehörigen Namen eingezeichnet werden. Die Satellitenansicht hat zwar den Nachteil, dass das zu übertragende Datenvolumen größer ist, dennoch wurde diese Darstellung gewählt, da diese zu einem realistischeren Spielerlebnis führt und mehr Details der Umgebung sichtbar werden.

Der Benutzer möchte den Kartenausschnitt natürlich nicht immer in der gleichen Größe sehen, sondern ihn auch vergrößern und verkleinern können. Dafür hat die MapView unterschiedliche Zoomstufen im Bereich 1 bis 23, zwischen denen der Benutzer mit Touch-Gesten oder eingebauten Zoom-Buttons wechseln kann. Letztere können mit MapView.setBuiltInZoomControls(true) hinzugefügt werden. Natürlich kann die Zoomstufe aber auch im Programmcode gesetzt werden. Dafür gibt es in der GoogleMaps API die Klasse com.google.android.maps.MapController, die unter anderem auch eine Methode zur animierten Bewegung der Karte zu einer bestimmten Geo-Koordinate bereitstellt.

Von diesen Möglichkeiten wird in der folgenden Initialisierung der MapView Gebrauch gemacht. Die MapView wird dabei zur GPS-Position des Benutzers bewegt, welche im PositionModel gegeben ist:

MapView mapView = (MapView) findViewById(R.id.game_mapview);
MapController mapController = mapView.getController();  
 
mapView.setBuiltInZoomControls(true);
mapView.setSatellite(true);
mapView.setStreetView(true);
 
// set Zoom Level
int maxZoomLevel = mapView.getMaxZoomLevel();
mapController.setZoom(maxZoomLevel - 3);
 
// Go to the Start Position
mapController.animateTo(positionModel.getPosition().asAndroidFormat());


Page last modified on March 21, 2011, at 02:29 PM