Here is a code which is actually working, but with manual draw, you can imitate my workaround for now. I hope an official answer will come up fast...
/** Map layer displaying contact locations */ public class LocationOverlay extends ItemizedOverlay<LocationOverlayItem> { /** Contacts with known location */ private final List<Contact> mContacts; /* * FIXME fields to manually draw items, we don't know how to make * ItemizedOverlay actually work */ private Bitmap mBubbleBitmap; private Paint mInnerPaint; private Paint mBorderPaint; private TextPaint mTextPaint; private static final int TEXT_OFFSET_X = 10; private static final int TEXT_OFFSET_Y = 15; private static final int INFO_WINDOW_HEIGHT = 25; /** Create a new instance */ public LocationOverlay() { super(UbikIMApplication.getApplicationResources().getDrawable( R.drawable.bubble)); /* Get contacts with location */ mContacts = new ArrayList<Contact>(); for (Contact contact : ContactManager.getInstance().getContacts()) if (contact.getLocation() != null) mContacts.add(contact); /* Populate */ populate(); /* FIXME manual draw managing relating code */ /* Decompress bubble bitmap */ mBubbleBitmap = BitmapFactory.decodeResource(UbikIMApplication .getApplicationResources(), R.drawable.bubble); /* Init painter used to draw the inner of the info window */ mInnerPaint = new Paint(); mInnerPaint.setARGB(225, 75, 75, 75); mInnerPaint.setAntiAlias(true); /* Init painter used to draw the border of the info window */ mBorderPaint = new Paint(); mBorderPaint.setARGB(255, 255, 255, 255); mBorderPaint.setAntiAlias(true); mBorderPaint.setStyle(Style.STROKE); mBorderPaint.setStrokeWidth(2); /* Init painter used to draw the text inside the info window */ mTextPaint = new TextPaint(); mTextPaint.setARGB(255, 255, 255, 255); mTextPaint.setAntiAlias(true); } @Override protected LocationOverlayItem createItem(int i) { return new LocationOverlayItem(mContacts.get(i)); } @Override public int size() { return mContacts.size(); } @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { /* FIXME manual draw because automatic doesn't seem to work */ /* Retrieve map view projection to compute coordinates */ Projection projection = mapView.getProjection(); /* For all contacts with location (including self) */ for (int index = size() - 1; index >= 0; index--) { OverlayItem item = getItem(index); String title = item.getTitle(); Point point = projection.toPixels(item.getPoint(), null); /* Draw bubble */ canvas.drawBitmap(mBubbleBitmap, point.x - mBubbleBitmap.getWidth() / 2, point.y - mBubbleBitmap.getHeight(), null); /* Compute info window geometry */ int INFO_WINDOW_WIDTH = getTextWidth(title) + TEXT_OFFSET_X * 2; RectF infoWindowRect = new RectF(0, 0, INFO_WINDOW_WIDTH, INFO_WINDOW_HEIGHT); int infoWindowOffsetX = point.x - INFO_WINDOW_WIDTH / 2; int infoWindowOffsetY = point.y - INFO_WINDOW_HEIGHT - mBubbleBitmap.getHeight() - 2; infoWindowRect.offset(infoWindowOffsetX, infoWindowOffsetY); /* Draw inner info window */ canvas.drawRoundRect(infoWindowRect, 5, 5, mInnerPaint); /* Draw border for info window */ canvas.drawRoundRect(infoWindowRect, 5, 5, mBorderPaint); /* Draw user name in the info window */ canvas.drawText(title, infoWindowOffsetX + TEXT_OFFSET_X, infoWindowOffsetY + TEXT_OFFSET_Y, mTextPaint); } super.draw(canvas, mapView, shadow); } /* FIXME manual draw related function */ /** @return text width in pixels that the text paint will use to draw text */ private int getTextWidth(String text) { int count = text.length(); float[] widths = new float[count]; mTextPaint.getTextWidths(text, widths); int textWidth = 0; for (int i = 0; i < count; i++) textWidth += widths[i]; return textWidth; } @Override protected boolean onTap(int index) { setFocus(getItem(index)); return true; } @Override protected boolean hitTest(LocationOverlayItem item, Drawable marker, int hitX, int hitY) { return super.hitTest(item, marker, hitX, hitY + mBubbleBitmap.getHeight() / 2); } On 27 août, 20:49, "Chris Chiappone" <[EMAIL PROTECTED]> wrote: > Same problem here, i converted code normal overlay code that worked in > order to use the "recommended" ItemizedOverlay. Can anyone confirm > that this is a bug or are we just doing something wrong. > > Thanks. > > On Tue, Aug 26, 2008 at 9:52 AM, Guillaume Perrot > > > > <[EMAIL PROTECTED]> wrote: > > > Hi, > > I have the same problem. > > The draw function is called, I tried to override it, I even added a > > bitmap in the top left corner for test purposes, I see my dummy bitmap > > but no items... > > > On 26 août, 07:50, marcel-182 <[EMAIL PROTECTED]> wrote: > >> Hi, > > >> Same problem here. I added two items and I found out that even the > >> draw() method from ItemizedOverlay is called but there is nothing on > >> my map view. My code is quite equal to yours. > > >> On 25 Aug., 18:29, Reto <[EMAIL PROTECTED]> wrote: > > >> > I've been trying to use the ItemizedOverlay and OverlayItem classes in > >> > the 0.9 Beta to simulate map markers but have been having some > >> > problems getting it to display on the map. > > >> > Once I've implemented my own ItemizedOverlay (and overriden > >> > createItem), creating a new instance of my class seems to work (I can > >> > extract OverlayItems from it) but adding it to the overlay list for > >> > one of my maps doesn't seem to do anything. > > >> > I've included the code for adding the ItemizedOverlay to the map, and > >> > the ItemizedOverlay implementation itself is also included. Have I > >> > done something wrong or is this functionality not yet available? > > >> > // Add the ItemizedOverlay to the Map > >> > private void addItemizedOverlay() { > >> > Resources r = getResources(); > >> > mapView = (MapView)findViewById(R.id.map_view); > >> > 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(); > > >> > } > > >> > Where MyItemizedOverlay is defined as: > > >> > 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; > >> > } > > >> > } > > -- > ~chris --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] Announcing the new Android 0.9 SDK beta! http://android-developers.blogspot.com/2008/08/announcing-beta-release-of-android-sdk.html For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---