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

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

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

Google Image:

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 Изображение:

Solutions Collecting From Web of "Как показать MarkerIcon и Title на карте Google как Google Apps?"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 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; } }); 

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

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

Мой подход к вашей ситуации заключается в использовании динамических значков с Google Maps .

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

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

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

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

воздушный шар

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

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

После нескольких дней исследований я заканчиваю этим решением. Мы можем установить собственный макет для 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