Android Google Maps CustomCap появляется за полилинией - PullRequest
1 голос
/ 17 апреля 2019

Я строю маршруты на карте Google в Android с полилиниями. Я хочу, чтобы на моей первой полилинии была начальная шапка, показывающая пользователю, где начинается маршрут.

Однако, когда отображаемый маршрут должен отображаться с несколькими полилиниями, а последняя полилиния заканчивается вблизи того места, где начинается первая полилиния, иногда я вижу начальный колпачок, отображаемый за этой последней полилинией.

Это происходит не каждый раз. Я хотел бы убедиться, что начальная крышка всегда отображается над любой и всеми полилиниями. Как я могу убедиться, что колпачок отображается поверх всех полилиний?

Вот метод, который я использую для рисования маршрутов на моей карте:

private fun addRoute(context: Context, map: GoogleMap, mapData: MapData, color: Int) {

            mapData.routeSegments.forEachIndexed { index, segment ->

                val polylineOptions = PolylineOptions()

                segment.points.forEach { point ->

                    polylineOptions.add(LatLng(point.latitude, point.longitude))
                }

                val polyline = map.addPolyline(polylineOptions)

                polyline.isClickable = false
                polyline.color = color
                polyline.width = POLYLINE_WIDTH

                if (index == 0) {
                    val bitmap = DrawableUtil.getBitmapFromVectorDrawable(context, R.drawable.star_red_28px)
                    polyline.startCap = CustomCap(BitmapDescriptorFactory.fromBitmap(bitmap))
                }

            }
        }

Ожидаемый:

enter image description here

Фактический:

enter image description here

1 Ответ

1 голос
/ 17 апреля 2019

Заглавные буквы определяют стиль Cap для каждого конца полилинии.Кажется, он отображается не сверху, а поверх полилинии.Поэтому, чтобы убедиться, что колпачок отображается «сверху» всех полилиний, вы должны установить Z-index для каждой полилинии кумулятивно и нарисовать полилинии от «глобального» начала до конца: в этом случае startCap следующегосегмент перекрывает конец текущей полилинии.Или вы не можете использовать Caps, но используйте маркеры с пользовательским значком R.drawable.star_red_28px следующим образом:

...
LatLng polylineStartLatLng = polyline.getPoints().get(0);

Drawable starDrawable = ContextCompat.getDrawable(getApplicationContext(), R.drawable.star_red_28px);
Canvas canvas = new Canvas();
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
starDrawable.setBounds(0, 0, 28, 28);
starDrawable.draw(canvas);
BitmapDescriptor markerIcon = BitmapDescriptorFactory.fromBitmap(bitmap);
mGoogleMap.addMarker(new MarkerOptions()
        .position(polylineStartLatLng)
        .anchor(0.5f, 0.5f)
        .icon(markerIcon)
);
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...