2015-09-30 2 views
1

Согласно документации Polyline;Android Google Map - строка отображения над маркерами

https://developers.google.com/android/reference/com/google/android/gms/maps/model/Polyline

полилиния может иметь Z-индекс, который влияет на их высоту по сравнению с другими формами, но не маркеры. Маркеры отображаются на более высоком уровне, чем все фигуры. Итак, чтобы получить строку, отображаемую над маркерами на карте, мне пришлось бы полностью поливать полилинию и поместить холст на FrameLayout и обработать чертеж линии самостоятельно? Или есть более простой способ?

+0

Я не думаю, что вы можете отобразить «полилинию» над любым «маркером», даже если учесть, что 'zIndex' - большое число. Я думаю, вы можете использовать метод [fromScreenLocation] (https://developers.google.com/android/reference/com/google/android/gms/maps/Projection#fromScreenLocation (android.graphics.Point)), чтобы преобразовать маркер положение в положение экрана, тогда вы можете нарисовать линию между двумя разными точками на экране вашего устройства. – ztan

+0

Является ли это тем, что я придумал как резервную позицию? Поместите еще один прозрачный вид сверху карты и нарисуйте это на себя? Это может усложнить ситуацию, так как мне нужно выяснить, какие маркеры проходят рядом, но я могу понять эту часть. – nasch

+0

Да, [fromScreenLocation] (https://developers.google.com/android/reference/com/google/android/gms/maps/Projection#fromScreenLocation (android.graphics.Point)) может помочь вам перевести позицию маркера на экран. – ztan

ответ

0

Для других, кто пытается это сделать, я создал класс, расширяющий FrameLayout и реализующий View.OnTouchListener. Вот ключевая часть:

@Override 
    public void onDraw(Canvas canvas) { 
     Path path = null; 
     for (Point point : points) { 
      if(path == null){ 
       path = new Path(); 
       path.moveTo(point.x, point.y); 
      } 
      else { 
       path.lineTo(point.x,point.y); 
      } 
     } 

     if(path != null) { 
      canvas.drawPath(path, paint); 
     } 
    } 

    @Override 
    public boolean onTouch(View view, MotionEvent event) { 

     if(event.getAction() == MotionEvent.ACTION_UP){ 
      callback.complete(points,null); 
      return true; 
     } 

     Point point = new Point(); 
     point.x = event.getX(); 
     point.y = event.getY(); 
     points.add(point); 
     invalidate(); 
     //Log.d(TAG, "point: " + point); 
     return true; 
    } 

onTouch фиксирует события прикосновения, и invalidate() триггеры onDraw который рисует линию. Добавьте один из них в свой макет (я сделал это на Java), а затем вы можете нарисовать поверх маркеров карты.

Смежные вопросы