我可以将自定义控件作为标记添加到OSMBONUSPACK吗?
我在名为MyMarkerItem.xml的Android xml文件中创建了一些按钮和图像
我想要类似MyMarker.setDesign(R.layout.MyMarkerItem);
谢谢
答案 0 :(得分:2)
好的,我知道您希望标记图标本身不是简单的位图,而是布局。
您可以做的是使用标记信息窗口“代替”标记图标。
首先,创建一个新类CustomInfoWindow,该类继承自MarkerInfoWindow-Markers的默认InfoWindow,并使用自己的布局:
public class CustomInfoWindow extends MarkerInfoWindow {
public CustomInfoWindow(MapView mapView) {
super(my_own_layout, mapView);
}
}
CustomInfoWindow myCustomInfoWindow = new CustomInfoWindow(mapView);
然后,在创建标记后,执行以下操作:
所有这些步骤都非常简单。
但是,我想您希望用户单击布局按钮时会发生某些行为。 因此,在您的CustomInfoWindow代码内部,您肯定必须做一些工作=>遵循this tutorial。
答案 1 :(得分:1)
Osmdroid arent中的标记实际上是android视图,因此无法向其中添加其他组件。他们基本上只是一张图片。
简单且建议的解决方案
不过,您可以将组件添加到MarkerInfoWindow上,单击后将显示该组件。
marker.setInfoWindow(new MarkerInfoWindow(R.layout.MyMarkerItem, mapView));
可能的“真实”解决方案
如果您确实需要这种行为-意味着您确实需要在地图上显示多个按钮作为“标记”,并为用户提供了单击它们的机会-应该可以创建自己的类似标记的实现类。换句话说,您将必须实现自己的OverlayWithIW或Overlay子类,并覆盖(主要是)draw
方法(应将按钮绘制到画布上)和{{ 1}}方法,您需要在其中正确检测用户单击了哪个按钮并调用相关操作。尝试遍历source of the Marker class,这是一个很好的例子。
但是请记住:这是一项高级任务。如果未正确完成,与画布上绘画有关的所有操作均可能导致性能问题。在某些情况下,您将不得不解决。您可能还需要解决和调试其他问题。我不会向初学者建议这样的解决方案。