Java 添加自定义控件作为标记OSMDROID奖励包

Java 添加自定义控件作为标记OSMDROID奖励包,java,android,osmdroid,osmbonuspack,Java,Android,Osmdroid,Osmbonuspack,我可以将自定义控件作为标记添加到OSMBONUSPACK吗 我在名为MyMarkerItem.xml的Android xml文件中创建了一些按钮和图像 我想要类似于MyMarker.setDesign(R.layout.MyMarkerItem)的东西 谢谢Osmdroid中的标记实际上不是android视图,因此不可能向其中添加其他组件。它们基本上只是一个图像 简单且建议的解决方案 但是,您可以将组件添加到单击后显示的中 marker.setInfoWindow(new MarkerInfoW

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

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

我想要类似于
MyMarker.setDesign(R.layout.MyMarkerItem)的东西


谢谢

Osmdroid中的标记实际上不是android视图,因此不可能向其中添加其他组件。它们基本上只是一个图像

简单且建议的解决方案

但是,您可以将组件添加到单击后显示的中

marker.setInfoWindow(new MarkerInfoWindow(R.layout.MyMarkerItem, mapView));
可能的“真实”解决方案

如果您真的需要这样的行为—这意味着您真的需要在地图上显示多个按钮作为“标记”,并让用户有机会单击它们—应该可以创建您自己的标记类实现。换句话说,您必须实现自己的or子类,并覆盖(主要)
draw
方法(该方法应将按钮绘制到画布上)和
onSingleTapConfiged
方法,在这两种方法中,您需要正确检测用户单击的按钮并调用相关操作。试着通过,这是一个很好的例子


但请记住:这是一项高级任务。如果在画布上绘制的所有相关内容没有正确完成,可能会导致性能问题。你必须处理一些边缘案件。您可能还需要解决和调试其他问题。我不会向初学者建议这样的解决方案

Osmdroid中的标记实际上不是android视图,因此不可能向其中添加其他组件。它们基本上只是一个图像

简单且建议的解决方案

但是,您可以将组件添加到单击后显示的中

marker.setInfoWindow(new MarkerInfoWindow(R.layout.MyMarkerItem, mapView));
可能的“真实”解决方案

如果您真的需要这样的行为—这意味着您真的需要在地图上显示多个按钮作为“标记”,并让用户有机会单击它们—应该可以创建您自己的标记类实现。换句话说,您必须实现自己的or子类,并覆盖(主要)
draw
方法(该方法应将按钮绘制到画布上)和
onSingleTapConfiged
方法,在这两种方法中,您需要正确检测用户单击的按钮并调用相关操作。试着通过,这是一个很好的例子


但请记住:这是一项高级任务。如果在画布上绘制的所有相关内容没有正确完成,可能会导致性能问题。你必须处理一些边缘案件。您可能还需要解决和调试其他问题。我不会向初学者建议这样的解决方案

好的,我知道您希望标记图标本身不是一个简单的位图,而是一个布局

您可以做的是使用标记信息窗口“代替”标记图标

首先,创建一个新类CustomInfoWindow,该类继承MarkerInfoWindow(标记的默认信息窗口),并使用您自己的布局:

public class CustomInfoWindow extends MarkerInfoWindow {
    public CustomInfoWindow(MapView mapView) {
        super(my_own_layout, mapView);
    }
}

CustomInfoWindow myCustomInfoWindow = new CustomInfoWindow(mapView);
然后,在创建标记后,执行以下操作:

  • 将标记图标设置为1x1像素大小的位图,完全透明:setIcon(mySmall_invisibleecon)
  • 将marker infowindow设置为您自己的:setInfoWindow(myCustomInfoWindow)
  • 根据布局的“外观”,将infowindow“锚定”设置为最合适、最自然的位置:setInfoWindowAnchor(锚定中心,锚定中心)可能吗
  • 强制打开信息窗口:showInfoWindow()
所有这些步骤都相当简单

但是,我猜当用户点击你的布局按钮时,你会期望一些行为发生。
因此,在CustomInfoWindow代码中,您肯定需要做一些工作=>follow

好的,我知道您希望标记图标本身不是一个简单的位图,而是一个布局

您可以做的是使用标记信息窗口“代替”标记图标

首先,创建一个新类CustomInfoWindow,该类继承MarkerInfoWindow(标记的默认信息窗口),并使用您自己的布局:

public class CustomInfoWindow extends MarkerInfoWindow {
    public CustomInfoWindow(MapView mapView) {
        super(my_own_layout, mapView);
    }
}

CustomInfoWindow myCustomInfoWindow = new CustomInfoWindow(mapView);
然后,在创建标记后,执行以下操作:

  • 将标记图标设置为1x1像素大小的位图,完全透明:setIcon(mySmall_invisibleecon)
  • 将marker infowindow设置为您自己的:setInfoWindow(myCustomInfoWindow)
  • 根据布局的“外观”,将infowindow“锚定”设置为最合适、最自然的位置:setInfoWindowAnchor(锚定中心,锚定中心)可能吗
  • 强制打开信息窗口:showInfoWindow()
所有这些步骤都相当简单

但是,我猜当用户点击你的布局按钮时,你会期望一些行为发生。
因此,在CustomInfoWindow代码中,您肯定需要做一些工作=>follow

因此,没有办法在同一个标记中添加多个按钮,例如将其用作覆盖?您建议使用其他API吗?@nadjibnet好吧,您不能使用
标记
。如果您真的需要这样的行为,那么可以实现您的自定义标记类。我将扩展我的回答,添加一些关于这方面的提示。是的,请,例如:我需要在一个按钮周围制作多个按钮icon@nadjibnet对不起,我不清楚你想要实现什么。是否要自定义标记的信息窗口(这很容易做到)?或者有一个布局而不是标记本身?请提供一个例子,我相信我们能够提供帮助。因此,没有办法在同一个标记中添加多个按钮,例如使用它作为覆盖?你建议使用其他API吗?@nadjibnet好吧,你不能使用
标记
。如果您真的需要这样的行为,那么可以实现您的自定义标记类。我将扩展我的回答,添加一些关于这方面的提示。是的