Удалите предыдущий маркер и добавьте новый маркер в Google Map v2
Я хочу удалить текущий маркер после долгого щелчка по карте в любом месте и воссоздать новый маркер в этот момент. Я очистил карту google по длинному клику на карте и создан новый маркер, но также отобразился предыдущий маркер.
Мой код:
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;
}
Ответы
Ответ 1
Просто создайте новый объект-маркер и перед добавлением нового маркера, удалите предыдущий
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);
}
});
Ответ 2
Просто снимите карту google перед добавлением маркера. Вот так:
@Override
public void onMapLongClick(LatLng latLng) {
googleMap.clear();
googleMap.addMarker(new MarkerOptions()
.position(latLng)
.title(latLng.toString())
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
}
Ответ 3
Вот простой способ Вам просто нужно изменить position
маркера. Создание глобального объекта как Marker marker;
После этого добавьте маркер для отображения, например
marker = map.addMarker(markerOptions).position(new Latlng(31.647316, 74.763791));
И после этого используйте marker.setPosition(newlaLng);
, где вам нужно добавить маркер.
Ответ 4
Просто повторить ответ Энтони.
Подпись метода для addMarker:
public final Маркер addMarker (параметры MarkerOptions)
Поэтому, когда вы добавляете маркер в GoogleMap, указав параметры маркера, вы должны сохранить возвращаемый объект Marker (вместо объекта MarkerOptions, который вы использовали для его создания). Этот объект позволяет впоследствии изменить состояние маркера. Когда вы закончите с маркером, вы можете вызвать Marker.remove(), чтобы удалить его с карты.
В стороне, если вы хотите временно скрыть его, вы можете переключить видимость маркера, вызвав Marker.setVisible(boolean).
Здесь вы можете найти ответ Удалить маркер из GoogleMap
Ответ 5
Пожалуйста, попробуйте код удара: -
// 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 - это значок. {tолько для понимания}
Ответ 6
Для людей, которые попробовали первое решение в этом вопросе, и вы получите ошибку Маркер не был инициализирован.
Потому что мы сравниваем маркер и ноль. Когда мы даже не инициализировали маркер в первую очередь.
Решение:
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++;
}
});
В начале счет будет равен нулю. Таким образом, метод маркер удалить не будет вызван. Один раз маркер инициализируется и счет увеличивается. Мы можем удалить предыдущий маркер с помощью метода remove и создать новый маркер, как показано в коде.