2017-02-10 4 views
3

Я пытаюсь покрасить некоторые здания на Google Maps, как это:Google Maps Text Overlay - Android

enter image description here

Я могу наложить объект многоугольник на верхней части здания, но им не в состоянии применить ярлык поверх него (ИД здания).

Как можно накладывать текст на зданиях, как показано на изображении выше с Android?

ответ

3

Я знаю, что этот вопрос немного устарел, но я просто понял, как это сделать для моего собственного проекта и думал, что я поделюсь. Метод состоит в том, чтобы создать растровое изображение вашего текста, а затем отобразить его как GroundOverlay на вашем полигоне с zIndex большим, чем многоугольник.

Если у вас есть список 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.