谷歌地图文字叠加 - Android

时间:2017-02-10 23:05:27

标签: android google-maps

我正在尝试在Google地图上为某些建筑物着色,如下所示:

enter image description here

我能够将多边形对象覆盖在建筑物的顶部,但我无法在其上面应用标签(建筑物的ID)。

如何使用Android在上面的图片中显示建筑物上的文字?

1 个答案:

答案 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布局。