How to add text above a marker on Google Maps?

后端 未结 1 972
北荒
北荒 2021-01-07 01:15
    try
    {
            JSONArray jArray = new JSONArray(result);
            for(int i=0;i

        
相关标签:
1条回答
  • 2021-01-07 01:27
    package com.labs;
    
    import java.util.ArrayList;
    
    import android.graphics.Paint;
    import android.graphics.Point;
    import android.graphics.Rect;
    import android.graphics.RectF;
    import android.graphics.drawable.BitmapDrawable;
    import android.graphics.drawable.Drawable;
    import android.text.TextPaint;
    
    import com.google.android.maps.GeoPoint;
    import com.google.android.maps.ItemizedOverlay;
    import com.google.android.maps.MapView;
    import com.google.android.maps.OverlayItem;
    
    public class ResoucesOverlay extends ItemizedOverlay
    {
    
        public ResoucesOverlay(Drawable defaultMarker)
        {
            /*Calling boundCenterBottom() on defaultMarker makes the marker image connect
              at its Bottom center to the latitude and longitude of this Overlay Item*/
            super(boundCenterBottom(defaultMarker));
    
            markerHeight = ((BitmapDrawable) defaultMarker).getBitmap().getHeight();
    
            /* This call to populate is important. Although this does not appear in the MapView tutorial
             * on Google's Android developer site, the mapview some times crashes without this call.
             */
            populate();
        }
    
        @Override
        protected OverlayItem createItem(int i)
        {
            return mOverlays.get(i);
        }
    
        @Override
        public int size()
        {
            return mOverlays.size();
        }
    
        @Override
        public void draw(android.graphics.Canvas canvas, MapView mapView,
                boolean shadow)
        {
            super.draw(canvas, mapView, shadow);
    
            // go through all OverlayItems and draw title for each of them
            for (OverlayItem item:mOverlays)
            {
                /* Converts latitude & longitude of this overlay item to coordinates on screen.
                 * As we have called boundCenterBottom() in constructor, so these coordinates
                 * will be of the bottom center position of the displayed marker.
                 */
                GeoPoint point = item.getPoint();
                Point markerBottomCenterCoords = new Point();
                mapView.getProjection().toPixels(point, markerBottomCenterCoords);
    
                /* Find the width and height of the title*/
                TextPaint paintText = new TextPaint();
                Paint paintRect = new Paint();
    
                Rect rect = new Rect();
                paintText.setTextSize(FONT_SIZE);
                paintText.getTextBounds(item.getTitle(), 0, item.getTitle().length(), rect);
    
                rect.inset(-TITLE_MARGIN, -TITLE_MARGIN);
                rect.offsetTo(markerBottomCenterCoords.x - rect.width()/2, markerBottomCenterCoords.y - markerHeight - rect.height());
    
                paintText.setTextAlign(Paint.Align.CENTER);
                paintText.setTextSize(FONT_SIZE);
                paintText.setARGB(255, 255, 255, 255);
                paintRect.setARGB(130, 0, 0, 0);
    
                canvas.drawRoundRect( new RectF(rect), 2, 2, paintRect);
                canvas.drawText(item.getTitle(), rect.left + rect.width() / 2,
                        rect.bottom - TITLE_MARGIN, paintText);
            }
        }
    
        public void addOverlay(int latitude, int longitude, String title,
                String snippet)
        {
            OverlayItem item;
    
            GeoPoint geopoint = new GeoPoint(latitude, longitude);
            item = new OverlayItem(geopoint, title, snippet);
            mOverlays.add(item);
            populate();
    
        }
    
        public void addOverlay(OverlayItem overlayItem)
        {
            mOverlays.add(overlayItem);
            populate();
        }
    
        private int markerHeight;
        private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
    
        private static final int FONT_SIZE = 12;
        private static final int TITLE_MARGIN = 3;
    }
    

    enter image description here

    0 讨论(0)
提交回复
热议问题