MapBox SDK如何获取marker的点击事件?

How to get click event of marker using MapBox SDK?

我正在使用 MapBox SDK 制作离线地图 我在地图上添加了多个标记, 如何获取标记的点击事件。 有什么办法可以获取marker的点击事件吗?

我使用 mapbox sdk 提供的名为 ItemizedIconOverlay 的功能获得了 mapbox 中标记点击事件的解决方案。

我做了如下操作:

   public void placeGTMarker() {
        alMarkerGT = new ArrayList<Marker>();
        marker = new Marker("my Marker", "", latLng);
        marker.setMarker(activity.getResources()
                .getDrawable(R.drawable.map_pin));
        mv.addMarker(marker);
        alMarkerGT.add(marker);
        itemizedIconOverlayGT = new ItemizedIconOverlay(activity, alMarkerGT,
                new OnItemGestureListener<Marker>() {

                    @Override
                    public boolean onItemSingleTapUp(int index, Marker item) {
                        return false;
                    }

                    @Override
                    public boolean onItemLongPress(int index, Marker item) {
                        return false;
                    }
                });
        mv.addItemizedOverlay(itemizedIconOverlayGT);
    }

我们可以在 onItemSingleTapUp 上执行任何事件,对于单击和长按,我们可以使用 onItemLongPress 方法。

我在我的应用程序中使用过并且效果很好

您可以在 MapboxMap 上设置一个 MarkerClickListener

map.setOnMarkerClickListener(this);

然后让你的 class/activity/fragment 实施 MapboxMap.OnMarkerClickListener

@Override
public boolean onMarkerClick(@NonNull Marker marker) {
    return true;
}
 @Override
public void onMapClick(@NonNull LatLng point) {

    if (destinationMarker != null) {
        mapboxMap.removeMarker(destinationMarker);
    }
    destinationCoord = point;
    destinationMarker = mapboxMap.addMarker(new MarkerOptions().position(destinationCoord));


    Geocoder coder = new Geocoder(RouteFinderNewC.this);
    List<Address> address;

    try {
        address = coder.getFromLocationName("Lahore pakistan", 1);
        if (address == null) {

        }
        assert address != null;
        Address location = address.get(0);
        double lat = location.getLatitude();
        double lng = location.getLongitude();
        destinationPosition = Point.fromLngLat(lat, lng);
        System.out.println("latitude and longitiude oof lahore ///////////" + lat + "  " + lng);
        originPosition = Point.fromLngLat(originCoord.getLongitude(), originCoord.getLatitude());
        getRoute(originPosition, destinationPosition);


    } catch (Exception e) {

    }




    Toast.makeText(this, "Kindly wait for finding suitable route for your.....", Toast.LENGTH_LONG).show();
    button.setEnabled(true);
    button.setBackgroundResource(R.color.mapboxBlue);

}

Kotlin

    setContentView(R.layout.activity_main)
    mapView1 = findViewById(R.id.mapView)
    mapView1?.onCreate(savedInstanceState)
    mapView?.getMapAsync { mapboxMap ->
    mapboxMap.setOnMarkerClickListener(object: MapboxMap.OnMarkerClickListener {
            override
            fun onMarkerClick(@NonNull marker:Marker):Boolean {
                Toast.makeText(getApplicationContext(), marker.getTitle(), Toast.LENGTH_LONG).show()
                return true
            }
            })}

MapBox v10 (Kotlin)

val annotationApi = mapView?.annotations
val pointAnnotationManager = annotationApi?.createPointAnnotationManager(mapView!!)
pointAnnotationManager?.addClickListener(object : OnPointAnnotationClickListener {
    override fun onAnnotationClick(annotation: PointAnnotation): Boolean {
        Toast.makeText(this@MainActivity, "Marker clicked", Toast.LENGTH_SHORT).show()
        return true
    }
})