Удалить наложение на карте - PullRequest
0 голосов
/ 28 августа 2011

Мой поиск приложений и одинаковые визуальные наложения.Но при следующем поиске старые оверлеи не совсем понятны.Я должен попытаться использовать map.getOverlays().clear();, но он также удаляет оверлей MyLocationOverlay.Есть способ удалить только одно и то же наложение?

Ответы [ 3 ]

2 голосов
/ 14 июня 2012

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

@ hooked82: проблема с выполнением всего лишь

overlays.remove(position)

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

Во время одного из моих проектов я столкнулся с той же проблемой. Поскольку я добавлял и удалял оверлеи для некоторых обновлений, по прошествии некоторого времени было действительно трудно отслеживать позиции оверлеев в списке.

Вот что я сделал, чтобы обойти проблему, и до сих пор проблем не было.

Шаг 1: создайте свой собственный класс наложения

public class MyOverlay extends Overlay
{
    private String overlayUUID;

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow)
    {
          -- do what you need to do here -- 
    }

    public String getOverlayUUID()
    {
          return overlayUUID
    }
}

Шаг 2: в MapClass, где вы обрабатываете наложения. Убедитесь, что список mapOverlays является глобальным списком в классе MapView, куда вы добавляете все свои mapOverlays

     List<Overlay> mapOverlays = mapView.getOverlays();

     public void removeChosenOverlay(String overlayUUID)
     {
         for(int i=0; i<mapOverlays.size(); i++)
         {
             String className = mapOverlays.get(i).getClass().getSimpleName();

             if(className.equals("MyOverlay"))
             {
                 MyOverlay myOverlay = (MyOverlay) mapOverlays.get(i);

                 if((myOverlay != null) && (myOverlay.getOverlayUUID.equals(overlayUUID)))
                 {
                     mapOverlays.remove(i);
                     mapView.invalidate()
                     break;
                 }
             }
         }
     }

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

Я надеюсь, что это поможет другим, кто сталкивается с теми же проблемами, с уникальными идентифицирующими оверлеями.

1 голос
/ 07 декабря 2012

вы можете сделать это с помощью счетчика и другой ссылки на overlayItem, чтобы сохранить старое наложение, которое вы хотите удалить в моем случае счетчик - current_overlay_counter, а old_overlay_item - ссылка на старое наложение при первом вызове счетчик равен 0, поэтому нет наложения для удаления

public void getcurrentPostion()
    {
    GeoPoint gpoint=new GeoPoint((int)((current_location.getLatitude())*1E6),( (int)((current_location.getLongitude())*1E6)));
        OverlayItem overlayitem = new OverlayItem(gpoint, "Hola, Mundo!", "I'm in Mexico City!");       
        mapOverlays = map.getOverlays();  
        itemizedoverlay.addOverlay(overlayitem);
        mapOverlays.add(itemizedoverlay);
        if(current_overlay_counter>0)
        {
            System.out.println("deleting overlay");
            itemizedoverlay.removeOverlay(old_overlay_item);
            map.invalidate();
        }

        old_overlay_item=overlayitem;
        current_overlay_counter++;
        map_controller.setCenter(gpoint);
    }

вам нужна еще одна вещь, метод для удаления наложения в вашей реализации класса ItemizedOverlay

этот метод берет ссылку на оверлей, который вы хотите удалить

public void removeOverlay(OverlayItem overlay){
          mOverlays.remove(overlay);
          System.out.println("removeOverlay is called");
             populate();
         }
1 голос
/ 28 августа 2011

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

overlays.add(position, overlay_object);

Затем, когда вам нужно удалить определенные наложения, вы можете удалить их таким же образом

overlays.remove(position);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...