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

2023-09-05 07:03:02 作者:素笺淡墨

我是从版本1升级Android应用程序到Android谷歌地图API的第2版。在我的版本1 code,我可以直接在我的ItemizedOverlay的子类,在地图上绘制文本通过重写draw()方法,如下所示。我想画的文字是动态的,我想旁边显示的每个地图标记的附加文本项,因此文本将被添加/删除经常为不同的符号绘制/删除。

I'm upgrading an Android application from version 1 to version 2 of the android google maps API. In my version 1 code, I was able to draw text directly on the map in my subclass of ItemizedOverlay by overriding the draw() method, as follows. The text I want to draw is dynamic, an additional text item that I want to display next to each map marker, so the text will be added/removed frequently as different symbols are plotted / removed.

@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的绘制文本?

However, this doesn't seem possible in the version 2 of the API. THere's isn't really a concept of ItemizedOverlays and nothing can be subclassed. Is there some way I can draw text on the GoogleMap in the new API version?

推荐答案

您可以从查看通过以下code创建一个标记:

You can create a Marker from a View by using the following code:

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和视图设置的东西(所有上述的位图位= .....)。这将显着减慢你的应用程序。

edit: If you use more than a single marker, make sure you don't do the DisplayMetrics and view setup stuff (everything above Bitmap bitmap =.....) for every marker. That would slow down your app dramatically.