我正在尝试在Open Street Maps中重现一个有效的HelloGoogleMaps应用程序 - 但我在OSMdroid中包含逐项覆盖时遇到了麻烦。
我已经查看了几个资源,但我无法弄清楚如何修复OsmItemizedOverlay上的错误 - 我想我错误地构造了OsmItemizedOverlay或者与OsmItemizedOverlay和ItemizedOverlay混淆了?但我试图改变的一切只会引发更多错误...... “隐式超级构造函数ItemizedOverlay()未定义。必须显式调用另一个构造函数” “无法从类型OverlayItem对静态方法setMarker(Drawable)进行静态引用” - 我希望有人能帮我直接获得类定义吗?
非常感谢!
package com.example.osmdroiddemomap;
import java.util.ArrayList;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import org.osmdroid.api.IMapView;
import org.osmdroid.views.*;
import org.osmdroid.views.overlay.*;
import org.osmdroid.views.overlay.OverlayItem.HotspotPlace;
public class OsmItemizedOverlay extends ItemizedOverlay<OverlayItem> {
Context mContext;
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
//ERRORS are raised by the following 3 lines:
public OsmItemizedOverlay(Drawable defaultMarker, Context context) {
OverlayItem.setMarker(defaultMarker);
OverlayItem.setMarkerHotspot(HotspotPlace.CENTER);
mContext = context;
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
@Override
public int size() {
return mOverlays.size();
}
protected boolean onTap(int index) {
OverlayItem item = mOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.show();
return true;
}
@Override
public boolean onSnapToItem(int arg0, int arg1, Point arg2, IMapView arg3) {
// TODO Auto-generated method stub
return false;
}
}
答案 0 :(得分:0)
尝试像这样改变你的构造函数
public OsmItemizedOverlay(Drawable defaultMarker, Context context) {
super(boundCenterBottom(defaultMarker));
mContext = context;
}
答案 1 :(得分:0)
我从未使用osmdroid,但查看here中的文档,它显示setMarkerHotspot()
作为OverlayItem
的方法,而enter link description here中的文档说明了默认标记总是与中心对齐。
因此,要解决此问题,您需要为添加的每个叠加项目指定一个标记,并将setMarkerHotspot()
设置为居中。
这样的事情可以解决问题:
Context mContext;
Drawable mDefaultMarker;
public OsmItemizedOverlay(Drawable defaultMarker, Context context) {
mContext = context;
mDefaultMarker = defaultMarker;
}
public void addOverlay(OverlayItem overlay) {
overlay.setMarkerHotspot(HotspotPlace.CENTER);
mOverlays.add(overlay);
populate();
}
祝你好运。
答案 2 :(得分:0)
只需将addItem函数更改为:
public void addItem(OverlayItem item) {
item.setMarkerHotspot(HotspotPlace.CENTER);
mOverlay.addItem(item);
}
答案 3 :(得分:0)
use following constructor:
public OsmItemizedOverlay(Drawable defaultMarker, Context context) {
super(defaultMarker,context);
mContext = context;
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}