我正在将Android应用程序从Android Google maps API的版本1升级到版本2。在我的版本 1 代码中,我能够通过覆盖 draw() 方法直接在地图上的逐项覆盖子类中绘制文本,如下所示。我要绘制的文本是动态的,是我想在每个地图标记旁边显示的附加文本项,因此随着不同符号的绘制/移除,文本将频繁添加/删除。
@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 中似乎是不可能的。这不是真正的逐项覆盖的概念,没有什么可以子类化。有什么方法可以在新的API版本中在谷歌地图上绘制文本吗?
我遇到了同样的问题,试图从 v1 升级到 v2。最后,我使用了一个标记,创建了一个带有文本的位图,并将其用作标记的图标。
首先,您必须创建 de 位图 与文本。注意:使用文本属性(颜色、字体、文本对齐,...)配置画图文本
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 canvasText = new Canvas(bmpText);
canvasText.drawText(strText, canvasText.getWidth() / 2, canvasText.getHeight(), paintText);
最后使用位图在标记选项中创建图标
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;
}
来源: http://www.nasc.fr/android/android-using-layout-as-custom-marker-on-google-map-api/
编辑:如果您使用多个标记,请确保不要为每个标记执行 DisplayMetrics 和查看设置内容(位图位图上方的所有内容 =....)。这会大大减慢您的应用程序速度。