(Android google maps) удаление старого маркера и размещение нового маркера, когда пользователь нажимает на новое местоположение с помощью mapoverlays

#android #google-maps

#Android #google-карты

Вопрос:

В моем приложении я показываю карту мира.
когда пользователь нажимает на определенное местоположение, я прикрепляю к нему маркер.

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

Я проверил несколько сообщений, но не смог найти никакого решения.

Вот код:

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

        return false;

    }   
@Override
    public boolean onTap(GeoPoint p, MapView mapView) {
// TODO Auto-generated method stub
 List<Overlay> mapOverlays = mapView.getOverlays();
 Drawable drawable = TpActivity.this.getResources().getDrawable(R.drawable.marker);
  HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,TpActivity.this);
OverlayItem overlayitem = new OverlayItem(p, "", "");
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
 mapView.invalidate();

latitude=p.getLatitudeE6() / 1E6;
longitude=p.getLongitudeE6() /1E6 ;
        Toast.makeText(TpActivity.this, 
            p.getLatitudeE6() / 1E6   ","   
            p.getLongitudeE6() /1E6 , 
            Toast.LENGTH_SHORT).show();

        new AlertDialog.Builder(TpActivity.this)
        .setTitle("Change city")
        .setMessage("go to the new location?")
        .setNegativeButton("NO", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                dialog.dismiss();
            }
        })
        .setPositiveButton("YES", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
             new newasync().execute();
            }
        }).show();
return true;
}
 

Комментарии:

1. моя основная цель — позволить пользователю выбрать любое местоположение на карте и прикрепить маркер к последнему местоположению, затронутому user…to дайте ему визуальное подтверждение того, к какому месту он прикоснулся

Ответ №1:

я использовал функцию рисования класса overlay вместо itemizedoverlay вот код:

 Geopoint k;
 

oncreate код здесь:

  mapview = (MapView) findViewById(R.id.mapView);
        mapview.setBuiltInZoomControls(true);
        List<Overlay> mapOverlays = mapview.getOverlays();
        MapOverlay mapOverlay = new MapOverlay();

       mapOverlays.add(mapOverlay);
 

класс наложения:

  class MapOverlay extends com.google.android.maps.Overlay
{      


    @Override
    public boolean onTap(GeoPoint p, MapView mapView) {
        // TODO Auto-generated method stub
         Drawable drawable = TpActivity.this.getResources().getDrawable(R.drawable.marker);
        /* List<Overlay> mapOverlays = mapView.getOverlays();

            HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,TpActivity.this);


        OverlayItem overlayitem = new OverlayItem(p, "", "");

        itemizedoverlay.addOverlay(overlayitem);

        mapOverlays.add(itemizedoverlay);*/
         k = p;
         mc= mapView.getController();
        mc.animateTo(p);
        // Point pt=mapView.getProjection().toPixels(p, null);
         mapView.invalidate();
        latitude=p.getLatitudeE6() / 1E6;
        longitude=p.getLongitudeE6() /1E6 ;
                Toast.makeText(TpActivity.this, 
                    p.getLatitudeE6() / 1E6   ","   
                    p.getLongitudeE6() /1E6 , 
                    Toast.LENGTH_SHORT).show();

                new AlertDialog.Builder(TpActivity.this)
                .setTitle("Change city")
                .setMessage("go to the new location?")
                .setNegativeButton("NO", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        dialog.dismiss();
                    }
                })
                .setPositiveButton("YES", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                     new newasync().execute();
                    }
                }).show();
        return true;
    }




    @Override
    public boolean draw(Canvas canvas, MapView mapView, 
    boolean shadow, long when) 
    {
        super.draw(canvas, mapView, shadow);                   
         if(k!=null)
         {
        //---translate the GeoPoint to screen pixels---
        Point screenPts = new Point();
        mapView.getProjection().toPixels(k, screenPts);

        //---add the marker---
        Bitmap bmp = BitmapFactory.decodeResource(
            getResources(), R.drawable.marker);            
        canvas.drawBitmap(bmp, screenPts.x-10, screenPts.y-34, null); 
         }
        return true;


    }