Android Google Map Рисование текста на нескольких оверлеях с помощью пользовательского маркера - PullRequest
1 голос
/ 05 июля 2011

Мне нужно нарисовать текст на специальном маркере, которых довольно много.Но проблема в том, что когда я рисую текст в Переопределенном при рисовании, весь текст элементов наложения выглядит находящимся на одном слое над маркерами и не выглядит синхронизированным при увеличении или уменьшении карты.Раньше я вызывал заполнение при добавлении каждого элемента, и это работало нормально, но это было слишком медленно.Любая помощь?

В моем пользовательском классе, который расширяется от ItemizedOverlay, конструктор выглядит следующим образом, где я устанавливаю пользовательский маркер:

    public HotelMapFilterOverlay(Drawable defaultMarker, final Context con) {
    super(boundCenterBottom(defaultMarker));
    this.marker = defaultMarker;
    this.con = con;
}

, а переопределенный метод рисования выглядит следующим образом:

    @Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
     super.draw(canvas, mapView, shadow);
     Bitmap bmp = ((BitmapDrawable) marker).getBitmap();

     Paint textPaint = new Paint();
     textPaint.setColor(Color.WHITE);
     textPaint.setTextSize(16f);
     textPaint.setTypeface(Typeface.create(Typeface.SANS_SERIF, 1));
     textPaint.setStyle(Paint.Style.FILL);

     Point screenPts = new Point();

     float bmpWidth = bmp.getWidth();
     float bmpHeight = bmp.getHeight();

     float left;
     float top;

     int total = mOverlayItems.size();
     for (int index = 0; index < total; index++) {

    gp = mOverlayItems.get(index).getPoint();
    mapView.getProjection().toPixels(gp, screenPts);

    left = screenPts.x - (bmpWidth / 2);
    top = screenPts.y - bmpHeight;

    // draw text
    this.title = mOverlayItems.get(index).getTitle();
    canvas.drawText(this.title, left + 8, top + 30,textPaint);          
    }
}

и я звоню населению только один раз, чтобы сделать это эффективным, как

public void callPopulate(){
   populate();
}

1 Ответ

1 голос
/ 18 ноября 2011

Чтобы текст маркера отображался отдельно над каждым маркером, без наложения всех слоев поверх маркеров, вам необходимо нарисовать маркеры самостоятельно и удалить super.draw(canvas, mapView, shadow).

Чтобы нарисовать маркеры, у вас уже есть большая часть кода! Просто создайте новый объект Paint markerPaint = new Paint() и добавьте следующее в цикл for перед тем, как рисовать текст:

canvas.drawBitmap(bmp, screenPts.x-(bmp.getWidth()/2), screenPts.y-(bmp.getHeight()), markerPaint);

Таким образом, маркер рисуется, а его текст рисуется сверху.

Что касается «заполнения», вы должны вызывать его сразу после добавления всех элементов в ваш ItemizedOverlay.

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