6

我正在将 Android 应用程序从版本 1 升级到 android google maps API 的版本 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 版本的 GoogleMap 上绘制文本?

4

2 回答 2

5

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

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

Rect boundsText = new Rect();
paintText.getTextBounds(strText, 0, strText.length(), boundsText);
Bitmap.Config conf = Bitmap.Config.ARGB_8888;
Bitmap bmpText = Bitmap.createBitmap(boundsText.width(), boundsText.height(), conf);

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

Canvas canvasText = new Canvas(bmpText);
canvasText.drawText(strText, canvasText.getWidth() / 2, canvasText.getHeight(), paintText);

最后在 MarkerOption 中使用 Bitmap 创建图标

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

希望它可以帮助你。

于 2013-03-01T12:10:28.407 回答
4

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

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

来源: http: //www.nasc.fr/android/android-using-layout-as-custom-marker-on-google-map-api/

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

于 2014-06-05T13:32:00.033 回答