Android 在谷歌地图上绘制文字不再可能?

Android 在谷歌地图上绘制文字不再可能?,android,google-maps-android-api-2,Android,Google Maps Android Api 2,我正在将Android应用程序从Android谷歌地图API的1版升级到2版。在我的版本1代码中,我能够通过重写draw()方法直接在ItemizedOverlay子类的映射上绘制文本,如下所示。我要绘制的文字是动态的,是我要在每个地图标记旁边显示的一个附加文字项,因此在打印/删除不同符号时,会频繁添加/删除文字 @Override public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long w

我正在将Android应用程序从Android谷歌地图API的1版升级到2版。在我的版本1代码中,我能够通过重写draw()方法直接在ItemizedOverlay子类的映射上绘制文本,如下所示。我要绘制的文字是动态的,是我要在每个地图标记旁边显示的一个附加文字项,因此在打印/删除不同符号时,会频繁添加/删除文字

@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
        long when) {
    if (!shadow) {              
            canvas.drawText("some text", (float) point.x + TextOffsetX , (float) point.y + TextOffsetY, m_paint);
     }


    return super.draw(canvas, mapView, shadow, when);
}

然而,在API的第2版中,这似乎是不可能的。实际上没有ItemizedOverlays的概念,任何东西都不能子类化。在新的API版本中,有什么方法可以在Google地图上绘制文本吗?

我也遇到了同样的问题,试图从v1升级到v2。最后,我使用了一个标记,创建了一个带有文本的位图,并将其用作标记的图标

首先,您必须使用文本创建反位图。注意:使用文本属性(颜色、字体、文本对齐等)配置paintText

然后,使用画布绘制文本。用画布尺寸修复文本有点疯狂

Canvas canvasText = new Canvas(bmpText);
canvasText.drawText(strText, canvasText.getWidth() / 2, canvasText.getHeight(), paintText);
最后使用位图在MarkerOption中创建图标

MarkerOptions markerOptions = new MarkerOptions()
    .position(latlngMarker)
    .icon(BitmapDescriptorFactory.fromBitmap(bmpText))
    .anchor(0.5f, 1);

希望它能帮助您。

您可以使用以下代码从视图创建标记:

public static Bitmap createDrawableFromView(Context context, View view) {
    DisplayMetrics displayMetrics = new DisplayMetrics();
    ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 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;
}
资料来源:


编辑:如果使用多个标记,请确保不要对每个标记执行DisplayMetrics并查看设置内容(位图位图上方的所有内容=…)。这会大大降低你的应用程序速度。

你看过
GroundOverlay
TileOverlay
了吗?我看过这些类的描述。它们似乎是为了叠加静态图像,而不是为了我要寻找的目的。这可能是真的,但我怀疑你会找到一种方法来制作其中一个,或者你运气不好。谢谢!这很有效。只需注意:行
canvasText.getHeight(),paintNameBackground)(2d块)错误-复制/粘贴错误?不管怎样,我不知道它的用途是什么,但是没有@jgonza73,“paintText”实例是什么类?您是如何制作的?@jgonza73此处的paintText变量是什么?
public static Bitmap createDrawableFromView(Context context, View view) {
    DisplayMetrics displayMetrics = new DisplayMetrics();
    ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    view.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 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;
}