باستخدام ItemizedOverlay و OverlayItem في الروبوت بيتا 0.9
-
09-06-2019 - |
سؤال
وقد تمكن أي شخص استخدام ItemizedOverlays
في الروبوت بيتا 0.9?لا أستطيع الحصول على عمل ، ولكن لست متأكدا إذا كنت قد فعلت شيئا خاطئا أو إذا كانت هذه الوظيفة ليست متاحة بعد.
كنت أحاول استخدام ItemizedOverlay
و OverlayItem
فصول.الغرض المقصود منها هو محاكاة علامات الخريطة (كما رأينا في خرائط Google المزج) ولكن كان عندي مشاكل في الحصول عليها أن تظهر على الخريطة.
يمكنني أن أضيف بلدي مخصص تراكب باستخدام تقنية مماثلة ، انها مجرد 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;
}
}
المحلول
من أجل استكمال سوف أكرر مناقشة Reto آخر في الروبوت المجموعات هنا.
ويبدو أنه إذا كنت تعيين حدود على drawable أنه لا حيلة:
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.أيضا, هنا جيد howto.