在iOS中,您可以通过调用以下内容轻松设置标记的标注:
[marker setCanShowCallout:YES];
[marker setRightCalloutAccessoryView:YOUR_BUTTON];
但是我找不到Mapbox Android SDK的这个功能.我现在有一个侦听器,它可以检测到calloutview上的触摸但是如何设置一个标注图像/按钮?
Marker marker = new Marker(p.getTitle(), p.getCatagoryName(), new LatLng(p.getLatitude(), p.getLongitude()));
marker.setMarker(getResources().getDrawable(getResources().getIdentifier(string, "drawable", getActivity().getPackageName())));
mMapView.addMarker(marker);
InfoWindow toolTip = marker.getToolTip(mMapView);
View view = toolTip.getView();
// view.setBackgroundResource(R.drawable.callout_button); THIS DOES NOT WORK
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Log.e(TAG, "onTouch");
return true;
}
});
解决方法:
ryansh的出色响应要求我在自定义布局中包含带有ids tooltip_title和tooltip_description的TextViews.我还必须添加第三个tooltip_subdescription TextView.默认的InfoWindow代码假定存在这些视图,如果不存在则会崩溃.为了更好的控制,我扩展了InfoWindow,覆盖了onOpen,并且能够使用我想要的工具提示的任何布局.对于扩展的Marker类中重写的createTooltip,我自然地实例化并返回我的扩展InfoWindow对象.
更新.这是一个扩展标记和放大器的例子. InfoWindow支持自定义工具提示:
public class MapboxMarker extends Marker {
private MyInfoWindow mInfoWindow;
public class MyInfoWindow extends InfoWindow {
public MyInfoWindow(int layoutResId, MapView mapView) {
super(layoutResId, mapView);
}
public void onOpen(Marker overlayItem) {
//
// Set data on mInfoWindow.getView()
//
}
}
public MapboxMarker(MapView mv, LatLng aLatLng, MapController mapController){
super(mv, "Title", "Description", aLatLng);
}
@Override
protected InfoWindow createTooltip(MapView mv) {
mInfoWindow = new MyInfoWindow(R.layout.custom_tooltip_layout, mv);
return mInfoWindow;
}
}