android - 如何像 Google Apps 一样在谷歌地图中同时显示 MarkerIcon 和标题?

标签 android google-maps android-canvas google-maps-android-api-2

当我在 Google 的 map Android 应用程序中找到最近的餐馆时,餐馆名称默认显示在标记图标附近。 (引用谷歌图片)。

但是在我的应用程序中,当我搜索最近的餐馆时我需要做同样的事情,我只能显示标记图标。 (引用我的应用图片)。

Google 图片:

Google Image

我的应用程序图像:

My Application Image

部分解决方案: 在这里,我找到了部分解决方案,我们通过使用 Canvas 绘制文本来获得此解决方案。我通过这些链接使用了以下代码 herehere但是我的文字的 Canvas 绘图切割。引用附件图片 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:

最佳答案

图标有多种来源,Places API 提供了足够的详细信息,因此您可以为每个地点选择正确的图标。不过我对 Android 不熟悉,所以我只会略微谈一下。

今天的情况,我想说诀窍是找到一套可靠你可以使用的图标。

  1. 最安全的选择可能是 Place API 自己的图标。至少在网络服务中,每个地方都是一个指向 URL 的 icon 字段。作为受支持的 API 的一部分,我觉得依赖这些图标最舒服 ─ 除了拥有自己的图标之外。这是酒吧的:

enter image description here

  1. 如果您喜欢它们,并且不介意它们有一天会消失而不另行通知,您可以使用已弃用 图表 API 的 Freestanding Icons .至少这些只会改变一次:从可用到不再可用。不过它们看起来不是特别好:

enter image description here

  1. 如果您真的想要在 Google map 搜索结果中使用相同的图标,并享受边缘生活,您可以从 Google map 中破解他们的 URL。当心:这些可能随时更改,因此您可能有一天醒来时没有图标! ─ 而且它可能经常改变,而不是一次。

enter image description here

但是,如果您使用的是 Android 版 Places API,我可以想象您正在寻找基于 Places API 网络服务的解决方案。

Place 对象似乎没有 getIcon() 或任何类似的东西,因此您需要从 getPlaceTypes() 的输出中得出自己的映射。到图标。我认为要求 Google 添加一个可以为您执行此操作的 getIcon() 方法是合理的,因此我建议 filing a feature request

关于android - 如何像 Google Apps 一样在谷歌地图中同时显示 MarkerIcon 和标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39306724/

相关文章:

android - 在Android Canvas中快速绘制大量线条: dealing with antialiasing and KitKat's peculiarities

java - Android中的观察者模式与数据同步

mysql - 需要有关谷歌地图过滤和将数据保存到数据库的建议

javascript - Google map V3 - 如何计算给定范围的缩放级别

java - Canvas.drawRect() 不绘制任何东西

android - 在我的半黑色 Canvas 上打一个透明洞

安卓工作室 : “libpng warning: iCCP: Not recognizing known sRGB profile that has been edited”

java - 如何以编程方式制作可绘制形状 (Android)

android - 如何使用 gradle 和 kotlin 为 android studio 设置 jvm 目标?

javascript - 使用新 API key 的 Google 地方信息库 OVER_QUERY_LIMIT