Es ist mir gelungen, die Karte auf dem Bildschirm anzuzeigen. Jetzt bewegt sich der Benutzer auf der Karte und drückt darauf. Nachdem er auf einen Punkt gedrückt hat, muss ich eine Stecknadel auf dem Bildschirm an der gedrückten Stelle hinzufügen. Wenn der Benutzer beschließt, einen anderen Punkt zu wählen, wenn er auf den gewählten Punkt drückt, würde die erste Stecknadel verschwinden und eine neue an der neuen Stelle gezeichnet werden
Das hat mir gefallen:
public class LocationSelectionActivity extends MapActivity
{
GeoPoint p;
List<Overlay> listOfOverlays;
MapOverlay mapOverlay;
private MapView mapView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.locationselection);
mapView = (MapView) findViewById(R.id.mapView);
mapView.setSatellite(false);
final MapController mc = mapView.getController();
String coordinates[] = {"46.540606", "22.454542"};
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
p = new GeoPoint(
(int) (lat * 1E6),
(int) (lng * 1E6));
mc.animateTo(p);
mc.setZoom(10);
ZoomControls zoomControls = (ZoomControls) findViewById(R.id.zoomcontrols);
zoomControls.setOnZoomInClickListener(new View.OnClickListener() {
public void onClick(View v) {
mc.zoomIn();
}
});
zoomControls.setOnZoomOutClickListener(new View.OnClickListener() {
public void onClick(View v) {
mc.zoomOut();
}
});
//---Add a location marker---
mapOverlay = new MapOverlay();
listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
mapView.invalidate();
}
class MapOverlay 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(p, screenPts);
//---add the marker---
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.map_flag);
canvas.drawBitmap(bmp, screenPts.x, screenPts.y-48, null);
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView)
{
//---when user lifts his finger---
if (event.getAction() == 1) {
GeoPoint p = mapView.getProjection().fromPixels(
(int) event.getX(),
(int) event.getY());
Toast.makeText(getBaseContext(),
p.getLatitudeE6() / 1E6 + "," +
p.getLongitudeE6() /1E6 ,
Toast.LENGTH_SHORT).show();
}
return false;
}
}
Dies zeichnet die erste Stecknadel (die map_flag-Ressource). Wenn ich auf die Karte klicke, erhalte ich den Toast mit den Koordinaten... alles, was noch zu tun ist, ist bei einem neuen Klick, die alte Stecknadel zu löschen und eine neue hinzuzufügen.
Aber wie macht man das?