Android + маркеры карт Google - PullRequest
0 голосов
/ 06 января 2012

У меня есть JSON-объект lat, lng и часть текста. Я использую ItemizedOverlay, чтобы добавить эти места на карту Google. Я добавляю все различные OverlayItems с отдельным маркером, который является объектом Drawable (простой png из каталога res).

Тем не менее, я бы предпочел, чтобы этот маркер был немного более значимым, включая текст местоположения. Получить этот текст не проблема, но как я могу добавить его в местоположение или маркер?

Нужно ли создавать собственный маркер, кроме того, есть ли какой-либо другой объект, который позволяет мне отображать текст на карте вместе с местоположением, или ...? Есть указатели?

1 Ответ

1 голос
/ 06 января 2012

Это идеальное решение, пожалуйста, проверьте ....
В вашей деятельности вам необходимо добавить следующие параметры

geopoint =  new GeoPoint((int) (Double.parseDouble(lat) * 1E6), (int)Double.parseDouble(lon) * 1E6));
myMapView.getOverlays().add( new  DrawableMapOverlay(this,geopoint,R.drawable.map, name));

затем в классе DrawableMapOverlay

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

public class DrawableMapOverlay extends Overlay {

  private static final double MAX_TAP_DISTANCE_KM = 3;
  // Rough approximation - one degree = 50 nautical miles
  private static final double MAX_TAP_DISTANCE_DEGREES = MAX_TAP_DISTANCE_KM * 0.5399568 * 50;
  private final GeoPoint geoPoint;
  private final Context context;
  private final int drawable;
  private final String workerName;
  /**
   * @param context the context in which to display the overlay
   * @param geoPoint the geographical point where the overlay is located
   * @param drawable the ID of the desired drawable
   */
  public DrawableMapOverlay(Context context, GeoPoint geoPoint, int drawable,String workerName) {
    this.context = context;
    this.geoPoint = geoPoint;
    this.drawable = drawable;
    this.workerName = workerName;
  }

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

    // Convert geo coordinates to screen pixels
    Point screenPoint = new Point();
    mapView.getProjection().toPixels(geoPoint, screenPoint);
    Paint paint = new Paint();
    // Read the image
    Bitmap markerImage = BitmapFactory.decodeResource(context.getResources(), drawable);
    paint.setStrokeWidth(1);
    paint.setARGB(150, 000, 000, 000);
    paint.setStyle(Paint.Style.STROKE);
    // Draw it, centered around the given coordinates
    canvas.drawBitmap(markerImage,
        screenPoint.x - markerImage.getWidth() / 2,
        screenPoint.y - markerImage.getHeight() / 2, null);
    canvas.drawText(workerName, screenPoint.x- markerImage.getWidth() / 2,  screenPoint.y - markerImage.getHeight() / 2 , paint);
    return true;
  }

  @Override
  public boolean onTap(GeoPoint p, MapView mapView) {
    // Handle tapping on the overlay here
    return true;
  }
}

В моем проекте все работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...