如何在Osmdroid地图添加Marker?代码报错需Drawable而非Marker
解决Osmdroid添加Marker时类型不匹配的问题
你遇到的问题是因为调用了错误的方法:map.getOverlay()(单数形式)对应的方法要求传入Drawable类型参数,而添加Marker应该使用map.getOverlays()(复数形式),它返回Overlay集合列表,支持直接添加Marker实例。
修改后的代码如下:
private void addMarker(GeoPoint point) { map.getController().setCenter(point); if (currentMarker != null) { map.getOverlays().remove(currentMarker); // 替换为getOverlays() } currentMarker = new Marker(map); currentMarker.setPosition(point); currentMarker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM); // 直接给Marker设置自定义图标,无需单独创建Drawable实例 currentMarker.setIcon(ContextCompat.getDrawable(getApplicationContext(), R.drawable.markerosm)); map.getOverlays().add(currentMarker); // 替换为getOverlays() map.invalidate(); }
核心修改说明:
- 将所有
map.getOverlay()替换为map.getOverlays():前者是获取单个Overlay的方法,后者是获取Overlay集合的入口,Marker作为Overlay的子类,必须添加到这个集合中才能在地图上显示。 - 移除了多余的
drawableMarker变量,直接通过Marker.setIcon()方法设置自定义图标,这是Osmdroid Marker的标准用法。
内容的提问来源于stack exchange,提问作者Rasuv Chandanshive
相关产品推荐
相关产品推荐

