0

I need to show the Custom information on map over lay as user tape on the Pin . I am suing Balloon map overlay and the information i need to show is coming from Web service for example dummy information is following - time - Name - Battery status - and few other info Thanks in advance

Usman Kurd
  • 7,212
  • 7
  • 57
  • 86

1 Answers1

0

This works for me, please remember to change package name and if you got any error please ask

 package com.utility;

    import java.util.ArrayList;

    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.drawable.Drawable;

    import com.google.android.maps.MapView;
    import com.google.android.maps.OverlayItem;

    public class MyItemizedOverlay extends BalloonItemizedOverlay<OverlayItem> {

        private ArrayList<OverlayItem> m_overlays = new ArrayList<OverlayItem>();
        private Context c;
        private Drawable marker;
        private String mFlag;

        public MyItemizedOverlay(Drawable marker, MapView mapView, String mFlag) {
            super(boundCenter(marker), mapView);
            this.marker = marker;
            c = mapView.getContext();
            this.mFlag = mFlag;
        }

        public void addOverlay(OverlayItem overlay) {
            m_overlays.add(overlay);
            populate();
        }

        @Override
        protected OverlayItem createItem(int i) {
            return m_overlays.get(i);
        }

        @Override
        public void draw(Canvas canvas, MapView mapView, boolean shadow) {
            super.draw(canvas, mapView, shadow);

            boundCenterBottom(marker);
        }

        public void removeOverlay(OverlayItem overlay) {
            m_overlays.remove(overlay);
            populate();
        }

        public void clear() {
            m_overlays.clear();
            populate();
        }

        @Override
        public int size() {
            return m_overlays.size();
        }

        @Override
        protected boolean onBalloonTap(int i) {

            return true;
        }

    }


MyItemizedOverlay mItemizedOverlay = new MyItemizedOverlay(marker1, mMapView, "AnyName"); //here marker1 is your pin in drawable like - getResources().getDrawable(R.drawable.pin_red);

//here mMapView is your mapview object that you have defined in your xml

List<Overlay> mapOverlays = mMapView.getOverlays();

//now when you get response from server put this code

GeoPoint newPoint = new GeoPoint(
                                (int) (Double.parseDouble(mLat) * 1E6),
                                (int) (Double.parseDouble(mLong) * 1E6));
                        Geocoder geoCoder = new Geocoder(getBaseContext(),
                                Locale.getDefault());
                        String _destinationAdd = ConvertPointToLocation(newPoint);

                        if (!mUserInfo.mLat.equals("null")
                                || mUserInfo.mLat != null
                                && !mUserInfo.mLong.equals("null")
                                || mUserInfo.mLong != null) {

                            OverlayItem overlayItem = new OverlayItem(
                                    newPoint,

                                            "Location : " + _destinationAdd,
                                    null);
                            itemizedOverlay.clear();

                            itemizedOverlay.addOverlay(overlayItem);
                            mapOverlays.add(itemizedOverlay);

                            mMapView.getController()
                                    .animateTo(
                                            getPoint(
                                                    Double.parseDouble(mUserInfo.mLat),
                                                    Double.parseDouble(mUserInfo.mLong)));
                            mMapView.getController()
                                    .setCenter(
                                            getPoint(
                                                    Double.parseDouble(mUserInfo.mLat),
                                                    Double.parseDouble(mUserInfo.mLong)));
                            mMapView.getController().setZoom(15);
                        }
                        mMapView.invalidate();