Использование ItemizedOverlay и OverlayItem в Android Beta 0.9
-
09-06-2019 - |
Вопрос
Кому-нибудь удалось воспользоваться ItemizedOverlays
в бета-версии Android 0.9?Я не могу заставить это работать, но я не уверен, сделал ли я что-то неправильно или эта функциональность еще недоступна.
Я пытался использовать ItemizedOverlay
и OverlayItem
классы.Их предназначение - имитировать маркеры карты (как показано в мэшапах Google Maps), но у меня возникли проблемы с их отображением на карте.
Я могу добавить свои собственные пользовательские наложения, используя аналогичную технику, это просто ItemizedOverlays
это не сработает.
Как только я реализоваю свой собственный ItemizedOverlay
(и переопределенный createItem
), создание нового экземпляра моего класса, кажется, работает (я могу извлечь OverlayItems
из него), но добавляя его к карте Overlay
список не позволяет ему выглядеть так, как должно.
Это код, который я использую для добавления ItemizedOverlay
класс как Overlay
перейдем к моему MapView
.
// Add the ItemizedOverlay to the Map
private void addItemizedOverlay() {
Resources r = getResources();
MapView mapView = (MapView)findViewById(R.id.mymapview);
List<Overlay> overlays = mapView.getOverlays();
MyItemizedOverlay markers = new MyItemizedOverlay(r.getDrawable(R.drawable.icon));
overlays.add(markers);
OverlayItem oi = markers.getItem(0);
markers.setFocus(oi);
mapView.postInvalidate();
}
Где MyItemizedOverlay
определяется как:
public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {
public MyItemizedOverlay(Drawable defaultMarker) {
super(defaultMarker);
populate();
}
@Override
protected OverlayItem createItem(int index) {
Double lat = (index+37.422006)*1E6;
Double lng = -122.084095*1E6;
GeoPoint point = new GeoPoint(lat.intValue(), lng.intValue());
OverlayItem oi = new OverlayItem(point, "Marker", "Marker Text");
return oi;
}
@Override
public int size() {
return 5;
}
}
Решение
Для полноты картины я повторю обсуждение поста Рето на Группы Android здесь.
Кажется, что если вы устанавливаете границы для своего объекта рисования, это делает свое дело:
Drawable defaultMarker = r.getDrawable(R.drawable.icon);
// You HAVE to specify the bounds! It seems like the markers are drawn
// through Drawable.draw(Canvas) and therefore must have its bounds set
// before drawing.
defaultMarker.setBounds(0, 0, defaultMarker.getIntrinsicWidth(),
defaultMarker.getIntrinsicHeight());
MyItemizedOverlay markers = new MyItemizedOverlay(defaultMarker);
overlays.add(markers);
Кстати, вышесказанное бесстыдно вырвано из демо-версия на сайте MarcelP.info.Кроме того, вот хороший способ.