答案 0 :(得分:4)
我知道这个问题有点陈旧,但我只想知道如何为我自己的项目做这个,并且我想分享。方法是创建文本的位图图像,然后在多边形上将其显示为GroundOverlay,其zIndex大于多边形。
如果您已获得多边形的LatLng列表,则可以执行以下操作:
private void showText(List<LatLng> latLngList) {
LatLngBounds.Builder builder = new LatLngBounds.Builder();
for (LatLng latLng : latLngList) {
builder.include(latLng);
}
googleMap.addGroundOverlay(new GroundOverlayOptions()
.positionFromBounds(builder.build())
.image(
BitmapDescriptorFactory.fromBitmap(
getBitmapFromView()
)
)
.zIndex(100)
);
}
.zIndex(100)部分非常重要,因为您希望文本显示在多边形上。 (我实际上并不确定最大z索引是多少,但100个有效)。
这是将布局转换为位图的方法。
private Bitmap getBitmapFromView() {
View customView = ((LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.my_text_layout, null);
customView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
customView.layout(0, 0, customView.getMeasuredWidth(), customView.getMeasuredHeight());
customView.buildDrawingCache();
Bitmap returnedBitmap = Bitmap.createBitmap(customView.getMeasuredWidth(), customView.getMeasuredHeight(),
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(returnedBitmap);
canvas.drawColor(Color.WHITE, PorterDuff.Mode.SRC_IN);
Drawable drawable = customView.getBackground();
if (drawable != null) {
drawable.draw(canvas);
}
customView.draw(canvas);
return returnedBitmap;
}
如果您只想要文字,那么您的布局&#39; R.layout.my_text_layout&#39;可以只是一个TextView布局。