У меня есть MapView с различными маркерами. При первом входе в MapActivity я устанавливаю границы рисунков, установленных на маркерах, и все выглядит нормально. Маркеры и тени отображаются правильно. Но когда я перехожу к другому действию и возвращаюсь, тени или маркеры больше не привязаны правильно. Иногда затрагиваются только некоторые из маркеров. Кто-нибудь может сказать мне, что здесь происходит? Вот некоторый код. Ниже я устанавливаю границы маркера, который можно рисовать:
InputStream is = assetManager.open(imageName);
drawable = Drawable.createFromStream(is, null);
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
drawable.setBounds(-width / 2, -height, width - (width / 2), 0);
И вот как я создаю/добавляю элемент наложения на карту:
GeoPoint point = createGeoPoint(lat, lon);
OverlayItem overlayItem = new OverlayItem(point, character.get_id(), "");
Drawable image = drawable;
overlayItem.setMarker(image);
itemizedOverlay.addOverlay(overlayItem);
Насколько я могу судить, оверлеи не добавляются на карту повторно, это просто перерисовка после события onResume(). Любые идеи?
Обновление: я на самом деле понял, что движутся только изображения того типа, которые нажаты, и это не тень, а изображение, которое движется. Итак, если есть x изображений типа A и y изображений типа B, и я нажимаю на любое изображение типа A, все изображения типа A смещаются по своим теням, когда я возвращаюсь к MapActivity, в то время как все изображения типа B по-прежнему правильно выровнены.
Еще одно обновление: я вывожу границы в журнал и вижу, что границы меняются после возврата на экран карты. При первоначальном добавлении маркера его границы следующие:
[Прямо(-25, -48 - 25, 1)]
Но при возврате на экран карты границы изменились на:
[Прямо(0, 0 - 50, 49)]
... с чего бы это?
Еще одно обновление: у меня есть обходной путь... но я все же хотел бы получить ответ, почему это происходит. Обходной путь состоит в том, чтобы переопределить метод рисования и установить границы (по центру снизу) всякий раз, когда вызывается метод рисования. Вот код:
@Override
public void draw(Canvas canvas) {
int dWidth = getIntrinsicWidth();
int dHeight = getIntrinsicHeight();
setBounds(-dWidth / 2, -dHeight, dWidth / 2, 0);
super.draw(canvas);
}