Как показать 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, я бы чувствовал себя наиболее комфортно в зависимости от этих значков ─ за исключением наличия собственных значков. Здесь для баров:
![введите описание изображения здесь]()
- Если вы им нравитесь и не возражаете, что они могут уйти ни разу без предупреждения, вы можете использовать устаревший Chart API Свободные значки. По крайней мере, эти будут меняться только один раз: от того, чтобы быть доступным, чтобы больше не быть доступным. Они не выглядят особенно хорошо, хотя:
![введите описание изображения здесь]()
- Если вам действительно нужны одинаковые значки, используемые в результатах поиска в Картах 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]()
Библиотека обширна и имеет множество опций, это всего лишь верхушка айсберга.
Надеюсь, что это поможет!