在地图上标记设置一个LongClickListener(Setting a LongClickLis

2019-07-21 13:30发布

有没有一种方法来设置一个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);


文章来源: Setting a LongClickListener on a map Marker