我想删除一个当前标记后,长时间点击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;
}
9条答案
按热度按时间uqjltbpv1#
只需创建一个新的标记对象,在添加新标记之前,删除以前的标记
编辑
对
OnMapClick
执行相同的操作z2acfund2#
只需在添加标记之前清除谷歌Map。就像这样:
vlf7wbxs3#
这里有一个简单的方法,你只需要改变标记的
position
。之后,将标记添加到Map,如
然后在需要添加标记的地方使用
marker.setPosition(newlaLng);
。8ftvxx2r4#
首先清除GoogleMap,然后添加一个新的标记。
mw3dktmi5#
请尝试吹代码:-
LatLng:-您要添加的latlong,bitmapDescroptor是图标。{仅用于理解}
hsvhsicv6#
只是转发安东尼的回答。
addMarker的方法签名为:
public final Marker addMarker(MarkerOptions options)因此,当你通过指定标记的选项来向GoogleMap添加标记时,你应该保存返回的Marker对象(而不是你用来创建它的MarkerOptions对象)。这个对象允许你在以后更改标记的状态。当你完成标记时,你可以调用Marker.remove()将其从Map中删除。
顺便说一句,如果您只想暂时隐藏它,可以通过调用Marker.setVisible(boolean)来切换标记的可见性。
您可以在这里找到答案Remove a marker from a GoogleMap
ddrv8njm7#
对于在此问题中尝试第一个解决方案的人员,您会得到标记尚未初始化的错误。
因为,我们正在比较标记和空值,而我们还没有初始化标记。
解决方案:
问题的解决方案:
一开始,计数将为零。因此,标记移除方法将不会被调用。一旦标记被初始化,计数递增。我们可以通过移除方法的帮助移除前一个标记**,并创建一个新标记,如代码所示。
ctehm74n8#
清除();
kwvwclae9#
简单的解决方案:在google map中添加一些标记之前添加这行代码