我正在将基于Google Maps的项目移植到Osmdroid以使用OpenStreetMaps。除了添加由多条直线和一些文本组成的叠加层外,端口工作正常。在这两个项目中,我通过一个计时器线程和处理程序调用redrawOverlay来添加Overlay。将Google Maps应用程序移植到Osmdroid - 覆盖问题
在OSM项目中,我的叠加层只是一个完全隐藏地图的灰色方块。如果我删除了重新拨号的呼叫,OSM磁贴显示OK。我已将叠加代码减少到下面代码示例中单个对角线的最小值。它在Google应用中正常工作,覆盖地图图块。该com.google.android.maps.Overlay有平局法,OSM有一个onDraw有,所以我在OSM版本:
private MapView mv;
private MapOverlay mmapOverlay = null;
private void redrawOverlay() {
gPt = mv.getMapCenter();
if (mmapOverlay == null)
mmapOverlay = new MapOverlay(getApplicationContext());
List<Overlay> listOfOverlays = mv.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mmapOverlay);
mv.invalidate();
}
public class MapOverlay extends org.osmdroid.views.overlay.Overlay {
public MapOverlay(Context ctx) {
super(ctx);
// TODO Auto-generated constructor stub
}
@Override
public void onDraw(Canvas canvas, MapView mapView) {
Paint lp3;
lp3 = new Paint();
lp3.setColor(Color.RED);
lp3.setAntiAlias(true);
lp3.setStyle(Style.STROKE);
lp3.setStrokeWidth(1);
lp3.setTextAlign(Paint.Align.LEFT);
lp3.setTextSize(12);
canvas.drawLine(10, 10, 150, 150, lp3);
}
虽然在谷歌地图原来我有相同的:
public class MapOverlay extends com.google.android.maps.Overlay {
@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
long when) {
super.draw(canvas, mapView, shadow);
Paint lp3;
lp3 = new Paint();
.....etc.
redrawOverlay是除了覆盖的实例化同样是刚:
mmapOverlay = new MapOverlay();
所有建议都会受到欢迎
为kurtzmarc UPDATE问:
感谢您的帮助,到目前为止,我看你是Osmdroid的作者之一。我喜欢迄今为止所做的。我想要禁止双击“跳转到和放大”。我希望它什么都不做。我认为它可能击中你的源此位,做zoomInFixing:
private class MapViewDoubleClickListener implements GestureDetector.OnDoubleTapListener {
@Override
public boolean onDoubleTap(final MotionEvent e) {
for (int i = mOverlays.size() - 1; i >= 0; i--)
if (mOverlays.get(i).onDoubleTapUp(e, MapView.this))
return true;
final GeoPoint center = getProjection().fromPixels(e.getX(), e.getY());
return zoomInFixing(center);
}
似乎它不,我可以将其覆盖。我正在使用3.0.1 jar和关联的javadocs。我想知道Mapview的setTouchDelegate方法是否会有所帮助,但是在javadoc中没有对它的引用。你有什么建议吗?
这肯定会在屏幕上画一条线,一旦我将mWorldSize_2定义为int并将一个Paint参数添加到.drawline。 (我想传入的Canvas与Google Maps传递的Canvas完全不同)。然而,底层的MapView消失了,我只是在灰色背景上划了一条线。 – NickT 2011-02-08 09:44:54