有没有一种方法来设置一个longClickListsner
对谷歌地图V2的标志? 我想有标记,用户长按并有选项的对话框显示删除或查看信息。 可以这样做?
Answer 1:
我有另一个命题。
首先,我做了标记拖动:
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模拟长按)
希望能帮助到你
Answer 2:
标记类没有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;
}
}
}
});
Answer 3:
由于ARP建议,您可以使用OnMarkerDragListener模拟长按。 就我而言,我创造新的标志物onMapLongClick()发生时,所以我想做类似(但不等于)的东西
@Override
public void onMarkerDragStart(Marker marker) {
marker.remove();
MarkerOptions options = createBasedOnMarker(marker);
this.googleMap.addMarker(options);
}
这样一来,你就删除了以前的地图内的标记,并在同一位置创建另一个具有相同内容的(你必须有地图或对保持信息从创建标记)。
希望我的解决方法帮助。
Answer 4:
的ARP答案是好的,但它从一个丑陋的效果受到影响:当你开始拖动,当你完成标记仍处于较高的位置比你与你的手指指向该标记上移。
看一下第http://www.youtube.com/watch?v=RxAHHJD4nU8
Answer 5:
赤也的回答是个不错的办法,但如果你有com.google.maps.android:android-maps-utils:0.3+ 包括库与你的项目,你可以准确的对距离:
double distance = SphericalUtil.computeDistanceBetween(
marker.getPosition(),
latLng
);
if( distance < 50 ) { // closer than 50 meters?
//..do stuff..
}
Answer 6:
嘿,看看这个代码,我刚刚从倒拖停止标记和使用的onMarkerDragStart
的长按检测。
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());
}
});
Answer 7:
万一有人需要它,我已经调整了对数函数来计算@akaya提到的接近阈值时,工作正常的5.0和18之间。在此变焦的功能是:
float zoom = mMap.getCameraPosition().zoom;
double maxDistance = 2000000 * Math.exp(-0.644*zoom);