android 在Google Map v2中删除之前的标记并添加新标记

0lvr5msh  于 2022-11-03  发布在  Android
关注(0)|答案(9)|浏览(200)

我想删除一个当前标记后,长时间点击Map上的任何地方,并重新创建一个新的标记在这一点上。我已经清除谷歌Map上长时间点击Map和新的标记创建,但以前的标记也显示。
我的代码是:

public class EditLocation extends Fragment {

View v;
Context c;
GoogleMap MAP;
Button back;
int loc;
String lat;
boolean isTapped = true;

public EditLocation(Context c, int location, String latitude) {
    // TODO Auto-generated constructor stub
    this.c = c;
    this.loc = location;
    this.lat = latitude;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    v = inflater.inflate(R.layout.map, container, false);

    int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(c);
    if (status != ConnectionResult.SUCCESS) {
        int requestCode = 10;
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status,
                (Activity) c, requestCode);
        dialog.show();
    } else {
        FragmentManager myFM = ((FragmentActivity) c)
                .getSupportFragmentManager();
        final SupportMapFragment myMAPF = (SupportMapFragment) myFM
                .findFragmentById(R.id.fragmentmap);

        MAP = myMAPF.getMap();

        MAP.setMyLocationEnabled(true);

        LocationManager locationManager = (LocationManager) c
                .getSystemService(Context.LOCATION_SERVICE);

        Criteria criteria = new Criteria();

        String provider = locationManager.getBestProvider(criteria, true);

        final Location location = locationManager
                .getLastKnownLocation(provider);
        final LatLng currentPosition = new LatLng(location.getLatitude(),
                location.getLongitude());

        MAP.setOnMapClickListener(new OnMapClickListener() {
            @Override
            public void onMapClick(LatLng point) {
                // TODO Auto-generated method stub

                MAP.addMarker(new MarkerOptions()
                        .position(currentPosition)
                        .snippet(
                                "Lat:" + location.getLatitude() + "Lng:"
                                        + location.getLongitude())
                        .icon(BitmapDescriptorFactory
                                .defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
                        .title("ME"));
                Log.e("lat", "" + point);

            }
        });

        MAP.setOnMapLongClickListener(new OnMapLongClickListener() {

            @Override
            public void onMapLongClick(LatLng point) {
                // TODO Auto-generated method stub

                // isTapped = false;
                MAP.clear();

                MAP.addMarker(new MarkerOptions().position(point)

                .title(point.toString()));

            }

        });

    }

    return v;

}
uqjltbpv

uqjltbpv1#

只需创建一个新的标记对象,在添加新标记之前,删除以前的标记

Marker marker;

MAP.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {

                @Override
                public void onMapLongClick(LatLng arg0) {
                    if (marker != null) {
                        marker.remove();
                    }
                    marker = MAP.addMarker(new MarkerOptions()
                            .position(
                                    new LatLng(arg0.latitude,
                                            arg0.longitude))
                            .draggable(true).visible(true));
                }
            });

编辑

OnMapClick执行相同的操作

MAP.setOnMapClickListener(new OnMapClickListener() {
        @Override
        public void onMapClick(LatLng point) {
            // TODO Auto-generated method stub

                if (marker != null) {
                    marker.remove();
                }
            marker = MAP.addMarker(new MarkerOptions()
                    .position(currentPosition)
                    .snippet(
                            "Lat:" + location.getLatitude() + "Lng:"
                                    + location.getLongitude())
                    .icon(BitmapDescriptorFactory
                            .defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
                    .title("ME"));
            Log.e("lat", "" + point);

        }
    });
z2acfund

z2acfund2#

只需在添加标记之前清除谷歌Map。就像这样:

@Override
public void onMapLongClick(LatLng latLng) {
    googleMap.clear();

    googleMap.addMarker(new MarkerOptions()
            .position(latLng)
            .title(latLng.toString())
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
}
vlf7wbxs

vlf7wbxs3#

这里有一个简单的方法,你只需要改变标记的position
之后,将标记添加到Map,如

marker = map.addMarker(markerOptions).position(new Latlng(31.647316, 74.763791));

然后在需要添加标记的地方使用marker.setPosition(newlaLng);

8ftvxx2r

8ftvxx2r4#

首先清除GoogleMap,然后添加一个新的标记。

mMap.clear();

//google map marker adding code here
mw3dktmi

mw3dktmi5#

请尝试吹代码:-

// Global Variable...
private Marker mPreviousMarker ;

     @Override
        public boolean onMarkerClick(Marker marker) {
            if (mPreviousMarker != null) {
                mPreviousMarker.remove();

            }
            mPreviousMarker = googleMap.addMarker(new MarkerOptions().position(latLng).icon(bitmapDescriptor));
        }

LatLng:-您要添加的latlong,bitmapDescroptor是图标。{仅用于理解}

hsvhsicv

hsvhsicv6#

只是转发安东尼的回答。
addMarker的方法签名为:
public final Marker addMarker(MarkerOptions options)因此,当你通过指定标记的选项来向GoogleMap添加标记时,你应该保存返回的Marker对象(而不是你用来创建它的MarkerOptions对象)。这个对象允许你在以后更改标记的状态。当你完成标记时,你可以调用Marker.remove()将其从Map中删除。
顺便说一句,如果您只想暂时隐藏它,可以通过调用Marker.setVisible(boolean)来切换标记的可见性。
您可以在这里找到答案Remove a marker from a GoogleMap

ddrv8njm

ddrv8njm7#

对于在此问题中尝试第一个解决方案的人员,您会得到标记尚未初始化的错误。
因为,我们正在比较标记和空值,而我们还没有初始化标记。

解决方案:

Int mMarkerCount = 0; //Global Variable
Marker mMarker; //Global Variable

if(mMarkerCount > 0){
    if(mMarker != null){
        mMarker.remove();              
    }
}

mMarker = mMap.addMarker(new MarkerOptions().position(latLng));
mMarkerCount++;

问题的解决方案

Int mMarkerCount = 0; //Global Variable
Marker mMarker;

mMap.setOnMapClickListener(new OnMapClickListener() {
    @Override
    public void onMapClick(LatLng latlng) {
        if(mMarkerCount > 0){
            if(mMarker != null){
                mMarker.remove();              
            }
        }

        mMarker = mMap.addMarker(new MarkerOptions().position(latLng));
        mMarkerCount++;  
    }
});

一开始,计数将为。因此,标记移除方法将不会被调用。一旦标记被初始化,计数递增。我们可以通过移除方法的帮助移除前一个标记**,并创建一个新标记,如代码所示。

ctehm74n

ctehm74n8#

清除();

@Override
public void onMapReady(GoogleMap googleMap) {

    MarkerOptions markerOptions = new MarkerOptions();
    LatLng latLng = new LatLng(address.getLat(), address.getLng());
    markerOptions.position(latLng);
    googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 5));
    googleMap.addMarker(markerOptions);

    googleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
        @Override
        public void onMapClick(LatLng latLng) {
            if (touchMarker != null) {
                touchMarker.remove();
            }
            googleMap.clear();
            MarkerOptions markerOptions = new MarkerOptions().position(latLng);
            touchMarker = googleMap.addMarker(markerOptions);
            address.setLat(touchMarker.getPosition().latitude);
            address.setLng(touchMarker.getPosition().longitude);

        }
    });
}
kwvwclae

kwvwclae9#

简单的解决方案:在google map中添加一些标记之前添加这行代码

Marker mMarker; //Global Variable

if (marker != null) 
    marker.remove();

mMarker = mMap.addMarker(new MarkerOptions().position(latLng));

相关问题