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
}
})
我正在使用 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
}
})