Как показать MarkerIcon и Title на карте Google как Google Apps?

Когда я нахожу ближайшие рестораны в приложении Google Maps Android, имя ресторана по умолчанию отображается возле значка маркера. (См. Изображение Google).

Но в моем приложении мне нужно делать то же самое при поиске ближайших ресторанов, я могу отображать только значки маркеров. (См. Мое приложение).

Изображение Google:

Google Image

Мое приложение:

Мой образ приложения

Частичное решение: Здесь я нашел частичное решение для этого, мы получаем это, рисуя текст, используя холст. Я использовал ниже код, ссылаясь на эти ссылки здесь и здесь Но вырезание холста резкой моего текста. Обратитесь к прилагаемому изображению TextDrawn Image

Marker myLocMarker = map.addMarker(new MarkerOptions()
            .position(myLocation)
            .icon(BitmapDescriptorFactory.fromBitmap(writeTextOnDrawable(R.drawable.bluebox, "your text goes here"))));

    private Bitmap writeTextOnDrawable(int drawableId, String text) {

            Bitmap bm = BitmapFactory.decodeResource(context.getResources(), drawableId)
                    .copy(Bitmap.Config.ARGB_8888, true);

            Paint paint = new Paint();
            paint.setStyle(Paint.Style.FILL);
            paint.setColor(Color.BLACK);
            paint.setTextAlign(Paint.Align.CENTER);
            paint.setLinearText(true);
            paint.setAntiAlias(true);
            paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));

            paint.setTextSize(35);

            Rect textRect = new Rect();
            paint.getTextBounds(text, 0, text.length(), textRect);

            Canvas canvas = new Canvas(bm);


            //Calculate the positions
    //        int xPos = (canvas.getWidth() / 2) - 2;     //-2 is for regulating the x position offset

            //"- ((paint.descent() + paint.ascent()) / 2)" is the distance from the baseline to the center.
    //        int yPos = (int) ((canvas.getHeight() / 2) - ((paint.descent() + paint.ascent()) / 2)) ;

            canvas.drawText(text, canvas.getHeight() + 2, canvas.getHeight() + 2, paint);

            return  bm;
        } 

TextDrawn Image:

Ответ 1

После нескольких дней исследований я заканчиваю этим решением. Мы можем настроить ваш собственный макет для IconGenerator

 View marker = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.custom_marker_layout, null);
    TextView numTxt = (TextView) marker.findViewById(R.id.num_txt);
    numTxt.setText("Naveen");

    final IconGenerator mIconGenerator = new IconGenerator(getApplicationContext());
    mIconGenerator.setContentView(marker);
    Bitmap icon = mIconGenerator.makeIcon();
    customMarker = mMap.addMarker(new MarkerOptions()
            .position(markerLatLng)
            .title("Title")
            .snippet("Description")
            .icon(BitmapDescriptorFactory.fromBitmap(icon))
            .anchor(0.5f, 1));

CustomMapMarker

Ответ 2

Есть несколько источников для значков, а API-интерфейс Places предоставляет достаточно подробностей, чтобы вы могли выбрать правильный значок для каждого места. Однако я не знаком с Android, поэтому я просто коснусь этого.

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

  • Самым надежным вариантом могут быть собственные значки Place API. По крайней мере, в веб-службе каждое место занимает поле icon, указывающее на URL-адрес. Являясь частью поддерживаемого API, я бы чувствовал себя наиболее комфортно в зависимости от этих значков ─ за исключением наличия собственных значков. Здесь для баров:

введите описание изображения здесь

  1. Если вы им нравитесь и не возражаете, что они могут уйти ни разу без предупреждения, вы можете использовать устаревший Chart API Свободные значки. По крайней мере, эти будут меняться только один раз: от того, чтобы быть доступным, чтобы больше не быть доступным. Они не выглядят особенно хорошо, хотя:

введите описание изображения здесь

  1. Если вам действительно нужны одинаковые значки, используемые в результатах поиска в Картах Google, и вам нравится жить на грани, вы можете взломать их URL-адреса из Карт Google. Остерегайтесь: они могут измениться в любое время, поэтому однажды вы можете проснуться без значков! ─, и он может меняться часто, а не только один раз.

введите описание изображения здесь

Однако, если вы используете API-интерфейс Places для Android, я могу представить, что вы ищете решение, основанное на веб-сервисе API Places.

Похоже, что объект Place не имеет getIcon() или чего-то подобного, поэтому вам нужно будет создать собственное сопоставление из вывода getPlaceTypes() иконок. Я думаю, было бы разумно попросить Google добавить метод getIcon(), который сделает это за вас, поэтому я рекомендую подавать запрос функции для этого.

Ответ 3

Попробуйте использовать собственный маркер карты. Вы можете создать свой собственный вид и установить это представление на маркер.

Шаг 1: Создайте собственный файл макета на основе ваших потребностей и раздуйте его.

 View customMarker = LayoutInflater.from(getApplicationContext()).inflate(R.layout.custom_marker, null);

Шаг 2: Преобразование пользовательского представления в растровое изображение.

public static Bitmap createDrawableFromView(Context context, View view) {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        view.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels);
        view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels);
        view.buildDrawingCache();
        Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        view.draw(canvas);
        return bitmap;
    }
Bitmap customeViewBitmap = createDrawableFromView(context, customMarker);

Шаг 3. Создайте маркер с приведенным растровым изображением и добавьте его в объект карты google.

GoogleMap googleMap = googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(
                    R.id.map)).getMap();
googleMap.addMarker(new MarkerOptions()
                    .position(latLng)                    .icon(BitmapDescriptorFactory.fromBitmap(customeViewBitmap)));

Шаг 4: Добавить прослушиватель MarkerClick

googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
                @Override
                public boolean onMarkerClick(Marker marker) {
                    //Your logic here
                    return false;
                }
            });

Ответ 4

Это не Маркеры. Я считаю, что они добавлены в базу данных Google Адресов, используя "Добавить места" .

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

Ответ 5

Мой подход к вашей ситуации состоял в том, чтобы использовать Динамические значки с Карт Google.

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

Например, следующая ссылка

https://chart.googleapis.com/chart?chst=d_map_spin&chld=2.1|35|FFFF88|11|_|A|Balloon!

создаст следующее изображение

balloon

Библиотека обширна и имеет множество опций, это всего лишь верхушка айсберга.

Надеюсь, что это поможет!