Seems like not much point in overriding ItemizedOverlay, what added functionality do you really get then just overriding Overlay?
On Thu, Aug 28, 2008 at 3:24 AM, Guillaume Perrot <[EMAIL PROTECTED]> wrote: > > Contact and LocationOverlayItem (extending OverlayItem to set fields > based on a Contact) are custom classes I created for my application, > they're not important to understand my code. > > On 28 août, 11:20, Guillaume Perrot <[EMAIL PROTECTED]> wrote: >> 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 > > > -- ~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 -~----------~----~----~----~------~----~------~--~---