Google Maps api v2 android:如何删除单个标记?

时间:2015-02-25 22:29:38

标签: java android google-maps marker

在我的应用程序中,我需要有两种类型的标记:第一种需要留在一个位置,第二种需要移动,现在我还没有静态标记,但我的应用程序可以显示标记移动,如果手机的位置发生了变化,但是我打电话给mMap.clear(),我不想在位置发生变化时清除所有标记,所以我只需要删除那个标记,我在另一个问题中读到我需要使用Marker.remove ();删除单个标记,但我不知道在代码中的实现位置。

以下是新位置的方法:

public void onLocationChanged(Location location) {
    mMap.clear();
    GetLatLong();
    handleNewLocation(location);
    mCurrentLocation = location;


}

这里是handleNewLocation方法:

    private void handleNewLocation(Location location) {
    if (mLastLocation != null) {

        LatLng latLng = new LatLng(list.get(0), list.get(1));
        //mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));


        //añadir un nuevo marker con la posición de la variable latLng
        MarkerOptions camion = new MarkerOptions()
                .position(latLng)
                .title("Camión")
                .snippet("ruta " + ruta)
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus));


        Marker marker = mMap.addMarker(camion);
        if (marker == null) {
            mMap.addMarker(camion);
        } else {
            camion.position(latLng);

        }

    }
}

谢谢。

编辑:

List<Marker> markers = new ArrayList<Marker>();
@Override
public void onLocationChanged(Location location) {
    markers.clear();
    GetLatLong();
    handleNewLocation(location);
    mCurrentLocation = location;
}
private void handleNewLocation(Location location) {
    if (mLastLocation != null) {

        LatLng latLng = new LatLng(list.get(0), list.get(1));
        //mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));


        //añadir un nuevo marker con la posición de la variable latLng
        MarkerOptions camion = new MarkerOptions()
                .position(latLng)
                .title("Camión")
                .snippet("ruta " + ruta)
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.bus));


        Marker marker = mMap.addMarker(camion);

        if (marker == null) {

            markers.add(marker);
        } else {
            camion.position(latLng);

        }

    }
}

}

2 个答案:

答案 0 :(得分:7)

如果你想删除一个标记 - 你必须先记住这个标记。然后拨打marker.remove()

代码:

class YourClass {
    Marker singleMarker; //marker to be removed

    public void addMarker() {
        ....
        //here you add your marker
        singleMarker = mMap.addMarker(camion);
    }

    public void removeSingleMarker() {
        if(singleMarker != null) {
            singleMarker.remove();
            singleMarker = null;
        }
    }
}

答案 1 :(得分:1)

如上所述,您可以尝试将what-you-want-remove marker保存在ArrayListHashMap中。

示例代码:

// before loop:
List<Marker> markers = new ArrayList<Marker>();

// inside your loop:
Marker marker = myMap.addMarker(new MarkerOptions().position(new LatLng(geo1Dub,geo2Dub))); //...
markers.add(marker);

// after loop:
markers.size();