Я портирую проект на основе Google Maps на Osmdroid, чтобы использовать OpenStreetMaps.Порт работает нормально, кроме добавления моего оверлея, который состоит из ряда прямых линий и некоторого текста.В обоих проектах я добавляю Overlay с помощью потока таймера и обработчика, вызывающего redrawOverlay.
В проекте OSM мое наложение - это просто серый квадрат, полностью скрывающий карту.Если я удаляю вызов redrawOveraly, плитки OSM отображаются в порядке.Я сократил оверлейный код до минимума одной диагональной линии в примерах кода ниже.Он отлично работает в приложении Google, накладывая плитку карты.В com.google.android.maps.Overlay есть метод draw, в 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);
}
Хотя в оригинале карт Google у меня есть эквивалент:
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:
Спасибо за вашу помощь, я вижу, что вы один из авторов 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);
}
Не похоже, что я могу переопределить его.Я использую jar 3.0.1 и связанные с ним javadocs.Мне интересно, помог бы метод setTouchDelegate Mapview, но в javadocs нет ссылки на него.У вас есть предложения, пожалуйста?