当用户访问该位置(接近标记)时,我想从地图中替换标记

I want to replace a Marker from a map when user visits that location ( gets near a Marker )

首先,我绘制一个 Marker 像这样:

public void addMarker(String title,String  lat,String Lng,int id,String address,int f)
{    
        marker= mMap.addMarker(new MarkerOptions().snippet(title)
                .title(title+", "+address)
                .position(new LatLng(Double.valueOf(lat), Double.valueOf(Lng)))
                .icon(BitmapDescriptorFactory.fromResource(id)));

        LatLng coordinate = new LatLng(Double.valueOf(lat), Double.valueOf(Lng));
        CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(coordinate, 10);
        mMap.animateCamera(yourLocation);
        mMarkerArray.add(marker);
}

之后,每当我到达任何现有的 Location

时,我都会尝试用另一个图标替换标记
@Override
public void onLocationChanged(Location location)
{
    Log.d("latitude_main", "onlocation???");
    Geocoder geocoder;
    List<Address> addresses;
    geocoder = new Geocoder(this, Locale.getDefault());
    double latitude = location.getLatitude();
    double longitude = location.getLongitude();
    Log.e("latitude_main", "latitude--" + latitude+"longitude="+longitude);

    current_lat= String.valueOf(latitude);
    current_lng= String.valueOf(longitude);
    Log.e("latitude_main","size-=="+salesmanlocationArrayList.size() );

   for(int i=0;i<salesmanlocationArrayList.size();i++)
   {           
       if(salesmanlocation.getLati().equals("12.9165757") && salesmanlocation.getLongi().equals("77.6101163"))
       {           
            mMap.addMarker(new MarkerOptions()
                   .snippet(""+i).title(salesmanlocation.getFirm_name()+", "+salesmanlocation.getAddress())
                   .position(new LatLng(Double.valueOf(salesmanlocation.getLati().toString()), Double.valueOf(salesmanlocation.getLongi().toString())))
                   .icon(BitmapDescriptorFactory.fromResource(R.drawable.event_events_select)));
       }
       mapFragment.getMapAsync(this);
   }
}

我想在用户访问该位置时从地图上删除标记。

您可以简单地定义一个 OnMyLocationChangeListener class 来执行您的任务,并将其设置在您的 GoogleMap 实例上,这样您就可以在您的应用程序中随时使用它。

第 1 步 - 定义您的侦听器

public class MyMarkerLocationListener implements GoogleMap.OnMyLocationChangeListener {

    List<Marker> markerList;
    int MY_DISTANCE;
    GoogleMap mMap;

    public MyMarkerLocationListener(List<Marker> markerList, int meters, GoogleMap mMap)
    {
        this.markerList = markerList;
        this.MY_DISTANCE = meters;
        this.mMap = mMap;
    }

    @Override
    public void onMyLocationChange(Location location) {

        // your code/logic
        //...

        Location myNewLocation = location;
        Location someMarkerLocation = new Location("some location");

        //for each marker on your list
        //check if you are close to it
        for (Marker m : markerList) {

            LatLng markerPosition = m.getPosition();

            someMarkerLocation.setLatitude(markerPosition.latitude);
            someMarkerLocation.setLongitude(markerPosition.longitude);

            if (myNewLocation.distanceTo(someMarkerLocation) < MY_DISTANCE) {

                //remove marker
                m.remove();

                //or if you still want to use it later
                //m.setVisible(false);

                // add your new marker
                //mMap.addMarker(new MarkerOptions().icon()....);
            }

        }
    }
}

定义 class 后,您只需在片段或 activity 代码的地图上设置侦听器 =)

步骤 2 - 实例化监听器并设置它

MyMarkerLocationListener myListener = new MyMarkerLocationListener(mMarkerArray, 100, mMap);
mMap.setOnMyLocationChangeListener(myListener);

更新以在评论中回答您的问题:

mMap使用前要先初始化,看这段代码

    public class MapPane extends Activity implements OnMapReadyCallback {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map_activity);

    MapFragment mapFragment = (MapFragment) getFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

@Override
public void onMapReady(GoogleMap map) {
//DO WHATEVER YOU WANT WITH GOOGLEMAP
 map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        map.setMyLocationEnabled(true);
        map.setTrafficEnabled(true);
        map.setIndoorEnabled(true);
        map.setBuildingsEnabled(true);
        map.getUiSettings().setZoomControlsEnabled(true);
    }
}

不要忘记您的 activity 应该实现 OnMapReadyCallback 接口以便调用 onMapReady 方法

地图准备就绪后才能使用

希望对您有所帮助!