将自定义控件添加为标记OSMDROID奖金包

时间:2018-10-25 23:50:01

标签: java android osmdroid osmbonuspack

我可以将自定义控件作为标记添加到OSMBONUSPACK吗?

我在名为MyMarkerItem.xml的Android xml文件中创建了一些按钮和图像

我想要类似MyMarker.setDesign(R.layout.MyMarkerItem);

谢谢

2 个答案:

答案 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);

然后,在创建标记后,执行以下操作:

  • 将标记图标设置为1x1像素大小的位图,完全透明:setIcon(mySmall_InvisibleIcon)
  • 将标记信息窗口设置为您自己的:setInfoWindow(myCustomInfoWindow)
  • 根据布局的“外观”,将信息窗口“锚点”设置为最合适和自然的位置:setInfoWindowAnchor(ANCHOR_CENTER,ANCHOR_CENTER)也许?
  • 强制打开信息窗口:showInfoWindow()

所有这些步骤都非常简单。

但是,我想您希望用户单击布局按钮时会发生某些行为。 因此,在您的CustomInfoWindow代码内部,您肯定必须做一些工作=>遵循this tutorial

答案 1 :(得分:1)

Osmdroid arent中的标记实际上是android视图,因此无法向其中添加其他组件。他们基本上只是一张图片。

简单且建议的解决方案

不过,您可以将组件添加到MarkerInfoWindow上,单击后将显示该组件。

marker.setInfoWindow(new MarkerInfoWindow(R.layout.MyMarkerItem, mapView));

可能的“真实”解决方案

如果您确实需要这种行为-意味着您确实需要在地图上显示多个按钮作为“标记”,并为用户提供了单击它们的机会-应该可以创建自己的类似标记的实现类。换句话说,您将必须实现自己的OverlayWithIWOverlay子类,并覆盖(主要是)draw方法(应将按钮绘制到画布上)和{{ 1}}方法,您需要在其中正确检测用户单击了哪个按钮并调用相关操作。尝试遍历source of the Marker class,这是一个很好的例子。

但是请记住:这是一项高级任务。如果未正确完成,与画布上绘画有关的所有操作均可能导致性能问题。在某些情况下,您将不得不解决。您可能还需要解决和调试其他问题。我不会向初学者建议这样的解决方案。