Маркер карты с текстом в Google Maps API Android v2

Я придумал этот пост, но он предназначен для устаревших API Карт Google.

http://tech.truliablog.com/2012/02/23/custom-map-markers-for-android-google-maps/

В новом API я не смог найти простой способ сделать это. На самом деле, я не мог этого сделать.

В основном я хочу иметь TextViews как маркер на карте с 9Patch, который можно извлечь в качестве фона текста. Trulia все еще делает это с новым API v2 в своем текущем приложении. Вы можете проверить его здесь.

Trulia current app

Как я могу это сделать?

Ответ 2

Это может быть просто достигнуто с помощью этой полезной библиотеки, предоставленной Google.

IconGenerator icg = new IconGenerator(this);
icg.setColor(Color.GREEN); // green background 
icg.setTextAppearance(R.style.BlackText); // black text 
Bitmap bm = icg.makeIcon("200 mi");

В style.xml

<style name="BlackText" parent="TextDefault">
    <item name="android:textColor">@color/black</item>
</style>

http://googlemaps.github.io/android-maps-utils/javadoc/

http://googlemaps.github.io/android-maps-utils/

https://github.com/googlemaps/android-maps-utils

Вы можете установить верхние ссылки в своем проекте из этой ссылки link

Ответ 3

Насколько я знаю, в настоящее время это не поддерживается картами google api v2. С другой стороны, вы можете динамически создавать растровое изображение для своего маркера и записывать значение, которое вы хотите показать в нем. Увы, с легкостью могут возникнуть проблемы с производительностью, если у вас много контактов.

Canvas canvas = new Canvas(bitmap);
canvas.drawText("Your text", textXOffset, textYOffset, mPictoPaint);
MarkerOptions options = new MarkerOptions().position([…]).icon(BitmapDescriptorFactory.fromBitmap(bitmapResult));
Marker newMarker = map.addMarker(options);

Обратите внимание, что bitmap необходимо изменить. Также вам нужно будет масштабировать базовое изображение (возможно, используя 9.patch) по вашему желанию.

Ответ 4

Я знаю, что этот вопрос старый, но я опубликую свой ответ здесь, если он кому-нибудь поможет.

Ни одно из приведенных выше решений не помогло мне, потому что

  • У меня уже есть пользовательские значки для маркеров в моем приложении

  • В моем приложении могут отображаться тысячи разных названий маркеров, поэтому создание большого количества изображений в памяти будет проблемой производительности

  • Когда значки маркеров становятся больше, карта становится очень нечитаемой

  • Я хотел, чтобы заголовки отображались только при наличии места, возможно, при скрытии, если недостаточно места для отображения

Я не нашел решения в интернете, поэтому закатал рукава и сделал эту библиотеку, которая решает мою проблему, надеюсь, она поможет и другим:

https://github.com/androidseb/android-google-maps-floating-marker-titles

Вот предварительный просмотр того, как это работает:

preview

Ответ 5

ссылаясь на пример кода Google

IconGenerator iconFactory = new IconGenerator(this);    
        iconFactory.setColor(Color.CYAN);
        addIcon(mMap, iconFactory, "Custom color", new LatLng(-33.9360, 151.2070));

Метод addIcon() здесь:

private void addIcon(GoogleMap googleMap, IconGenerator iconFactory, CharSequence text, LatLng position) {
        MarkerOptions markerOptions = new MarkerOptions().
                icon(BitmapDescriptorFactory.fromBitmap(iconFactory.makeIcon(text))).
                position(position).
                anchor(iconFactory.getAnchorU(), iconFactory.getAnchorV());

        googleMap.addMarker(markerOptions);
    }