есть способ установить longClickListsner
на маркер на картах Google v2? Я хочу, чтобы пользователь долго нажимал на маркер и показывал диалоговое окно с возможностью удаления или просмотра информации. Это можно сделать?Настройка LongClickListener на карте Маркер
ответ
Класс маркера не имеет LongClickListener. Хотя этот подход далеко не идеален, здесь есть идея о том, что вы можете сделать.
Установите длинный клик для вашего объекта GoogleMap. При длительном нажатии проверьте, достаточно ли нажата позиция для любого из ваших маркеров. Чтобы решить этот порог близости, вы можете использовать уровень масштабирования карты.
Вот не очень хороший пример кода. Я не пробовал, но это может удовлетворить ваши потребности.
map.setOnMapLongClickListener(new OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng latLng) {
for(Marker marker : yourMarkerList) {
if(Math.abs(marker.getPosition().latitude - latLng.latitude) < 0.05 && Math.abs(marker.getPosition().longitude - latLng.longitude) < 0.05) {
Toast.makeText(MapActivity.this, "got clicked", Toast.LENGTH_SHORT).show(); //do some stuff
break;
}
}
}
});
У меня есть другое предложение.
Сначала я сделать маркер перемещаемый:
mapa.addMarker(new MarkerOptions() ...
.setDraggable(true);
После того, как вы можете сделать слушатель setOnMarkerDragListener так:
mapa.setOnMarkerDragListener(new OnMarkerDragListener() {
@Override
public void onMarkerDragStart(Marker marker) {
// TODO Auto-generated method stub
//Here your code
}
@Override
public void onMarkerDragEnd(Marker marker) {
// TODO Auto-generated method stub
}
@Override
public void onMarkerDrag(Marker marker) {
// TODO Auto-generated method stub
}
});
И тогда вы можете переопределить, что вы хотите (обычно onMarkerDragStart имитировать длинный нажмите)
Надеюсь, это поможет
Отлично! :))) – whiteLT
Я пробовал это, но мой маркер меняет положение только на кране. Я не начал тащить его, просто коснулся его, и он изменился. Я не хочу этого делать. Можете ли вы предложить мне другой путь. –
Я думаю, это потому, что маркер сосредоточен в точке, к которой вы прикасались. Я не знаю, есть ли решение для этого, извините. – ARP
ARP Ответ хорошо, но он страдает от уродливого эффекта: маркер сдвигается, когда вы начинаете перетаскивать, и когда вы заканчиваете маркер, все еще находится в более высоком положении, чем вы указываете пальцем.
Посмотрите на http://www.youtube.com/watch?v=RxAHHJD4nU8
По ARP предложил, вы можете использовать OnMarkerDragListener имитировать длинный щелчок. В моем случае, я создаю новые маркеры, когда onMapLongClick() произошло, так что я хотел сделать что-то подобное (но не равно), что
@Override
public void onMarkerDragStart(Marker marker) {
marker.remove();
MarkerOptions options = createBasedOnMarker(marker);
this.googleMap.addMarker(options);
}
таким образом, вы будете удалить маркер, который ранее был в пределах карту и создать другую в том же положении, с тем же содержимым (у вас должна быть карта или пара, чтобы сохранить информацию от создаваемых вами маркеров).
Надеюсь, что это поможет.
akaya's answer не плохой подход, но если у вас есть com.google.maps.android:android-maps-utils:0.3+library included с вашим проектом вы можете быть точными о расстоянии:
double distance = SphericalUtil.computeDistanceBetween(
marker.getPosition(),
latLng
);
if(distance < 50) { // closer than 50 meters?
//..do stuff..
}
Плохой подход, вы также должны уважать уровень масштабирования карты –
Zoom-Independent. http://googlemaps.github.io/android-maps-utils/javadoc/com/google/maps/android/SphericalUtil.html#computeDistanceBetween-LatLng-LatLng- – flowtron
Только в случае, если кто-то может понадобиться, я настроил логарифмическую функцию для вычисления порога близости @akaya упоминается, которая работает отлично подходит для зумирования между 5,0 и 18. Здесь функция:
float zoom = mMap.getCameraPosition().zoom;
double maxDistance = 2000000 * Math.exp(-0.644*zoom);
Эй. Взгляните на этот код. Я только что остановил маркер от перетаскивания и использовал обнаружение длинного щелчка .
public abstract class LinkMarkerLongClickListener implements GoogleMap.OnMarkerDragListener {
private int previousIndex = -1;
private Marker cachedMarker = null;
private LatLng cachedDefaultPostion = null;
private List<Marker> markerList;
private List<LatLng> defaultPostions;
public LinkMarkerLongClickListener(List<Marker> markerList){
this.markerList = new ArrayList<>(markerList);
defaultPostions = new ArrayList<>(markerList.size());
for (Marker marker : markerList) {
defaultPostions.add(marker.getPosition());
marker.setDraggable(true);
}
}
public abstract void onLongClickListener(Marker marker);
@Override
public void onMarkerDragStart(Marker marker) {
onLongClickListener(marker);
setDefaultPostion(markerList.indexOf(marker));
}
@Override
public void onMarkerDrag(Marker marker) {
setDefaultPostion(markerList.indexOf(marker));
}
@Override
public void onMarkerDragEnd(Marker marker) {
setDefaultPostion(markerList.indexOf(marker));
}
private void setDefaultPostion(int markerIndex) {
if(previousIndex == -1 || previousIndex != markerIndex){
cachedMarker = markerList.get(markerIndex);
cachedDefaultPostion = defaultPostions.get(markerIndex);
previousIndex = markerIndex;
}
cachedMarker.setPosition(cachedDefaultPostion);
}
}
Вы можете позвонить слушателю вот так!
map.setOnMarkerDragListener(new LinkMarkerLongClickListener(markers) {
@Override
public void onLongClickListener(Marker marker) {
ToastUtils.showToast(Mission1Activity.this, marker.getTitle());
}
});
- 1. Настройка маркер на карте Google
- 2. Google MAP API - Маркер на карте Настройка
- 3. маркер на карте google
- 4. Перетащите маркер на карте
- 5. Анимированная маркер на карте
- 6. удалить маркер на карте
- 7. Маркер на карте проблема
- 8. Draggable маркер на карте
- 9. Настройка маркера на карте google
- 10. Multiple событие на карте Маркер
- 11. кластера Маркер на карте Google
- 12. добавив простой маркер на карте
- 13. множественный маркер на карте google
- 14. Показать движущийся маркер на карте
- 15. Маркер не отображается на карте
- 16. Маркер, зависающий на карте Google
- 17. Неожиданные маркер реагирует на карте()
- 18. Маркер не отображается на карте
- 19. название Маркер на карте Google
- 20. Как указать маркер на карте? Я не могу указать маркер
- 21. как создать новый маркер на карте Google
- 22. Маркер не отображается на карте angularjs
- 23. Пользовательский вид как маркер custum на карте
- 24. Как остановить движущийся маркер на карте Google?
- 25. Маркер Google Map отсутствует на пользовательской карте
- 26. Показать маркер на карте Google Android
- 27. Маркер на карте исчезает при изменении ориентации.
- 28. Как подключить TextView на карте Google Маркер
- 29. Вращая маркер на карте, используйте UIImage
- 30. ближайшие 5 место (маркер) на карте Google
Это будет один способ, но его не дурак доказательство, потому что вы можете выбрать маркер, вы не хотите, и вы не будете знать, пока вы не удалите его – tyczj
@tyczj Да, это не фол доказательство. Тем не менее, даже если маркер имел слушателя, ошибки были бы связаны, когда они были слишком близко. Имо, проверка ближайшего маркера не вызывает дополнительных проблем. В любом случае Misclicks, вы просто должны заставить пользователя подтвердить операцию. – akaya