2017-02-10 12 views
3

私はこのようなGoogleマップ上のいくつかの建物に色をしようとしています:Googleマップのテキストオーバーレイ - アンドロイド

enter image description here

私は適用できない建物の最上部にポリゴンオブジェクトをオーバーレイすることができていますが、イムその上にラベル(建物のID)が表示されます。

Androidで上記の画像に表示されているように、建物のテキストをオーバーレイするにはどうすればよいですか?

答えて

3

私はこの質問がちょっと古いことを知っていますが、私は自分のプロジェクトでこれをどうやって行うのかを考え出し、分かち合うと思っていました。この方法は、テキストのビットマップイメージを作成し、そのポリゴンよりも大きいzIndexを使用してポリゴンにGroundOverlayとして表示することです。

あなたは次の操作を行うことができ、あなたのポリゴンのLatLngsのリストを持っている場合は、次のテキストがあなたの上に表示されることになるでしょうので、

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

あなただけのテキストをしたい場合は、あなたのレイアウト「R.layout.my_text_layoutはただのTextViewでレイアウトすることができます。

関連する問題