mapbox / mapbox-plugins-android

Mapbox Android Plugins are a collection of libraries that extend our other SDKs, helping you design powerful mapping features while the plugins handle most of the heavy lifting.
https://www.mapbox.com/android-docs/plugins/overview/
BSD 2-Clause "Simplified" License
241 stars 120 forks source link

Line manager won't show lines #1155

Open kikothemaster opened 4 years ago

kikothemaster commented 4 years ago

On Android 6.0 - Android 7.0 (I've tested on those versions) the lines are not displayed.

On Android 10.0 lines are normally showed with exact same implementation as on Android 6.0 - Android 7.0 (not sure for 8.0 - 10.0 versions).

 lineManager = LineManager(map, this, style).apply {
        lineCap = Property.LINE_CAP_ROUND
 }

 points.map { line ->
        val lineOptions = LineOptions()
            .withLineColor(linesColor)
            .withLineWidth(3f)
            .withGeometry(
                LineString.fromLngLats(line.map { Point.fromLngLat(it.longitude, it.latitude) })
            )
        lines.add(lineManager.create(lineOptions))
 }

Then I've just noticed that the line appeared for a brief second and then disappeared.

Then I tried with a different approach: I tried adding GeoJsonSource and LineLayer. Lines are shown, but when I update GeoJsonSource with different data, lines are hidden again šŸ‘Ž When I load the exact same data as previously into GeoJsonSource, lines are shown again.

This is also happening on Android 6.0 - Android 7.0

fun addOrEditRouteLines(style: Style?, color: String, data: List<List<LatLng>>) {
    with(style ?: return) {
        (sources.find { it.id == DEFAULT_LAYER_LINES } as? GeoJsonSource)?.apply {
            (getLayer(DEFAULT_LAYER_LINES) as LineLayer).apply {
                withProperties(PropertyFactory.lineColor(color))
            }

        clearLines(style)
            setGeoJson(
                fromFeatures(
                    data.map { line ->
                        Feature.fromGeometry(
                            LineString.fromLngLats(line.map { Point.fromLngLat(it.longitude, it.latitude) })
                        )
                    }
                )
            )
            return
        }
        val routeLines = GeoJsonSource(
            DEFAULT_LAYER_LINES,
                fromFeatures(
                    data.map { line ->
                        Feature.fromGeometry(
                            LineString.fromLngLats(line.map { Point.fromLngLat(it.longitude, it.latitude) })
                        )
                    }
                )
        )
        addSource(routeLines)

        addLayer(
            LineLayer(DEFAULT_LAYER_LINES, DEFAULT_LAYER_LINES).withProperties(
                    PropertyFactory.lineWidth(3f),
                    PropertyFactory.lineColor(color),
                    PropertyFactory.lineCap(Property.LINE_CAP_ROUND)
            )
        )
    }
}
kikothemaster commented 4 years ago

Any info about that?

wprenison commented 3 years ago

Lines are only shown for me using the lineManager if I use the withLinePattern functionality, as soon as I try using color they don't show up on Android 10.

Haven't tried your alternate approach yet.

This is on 0.9.0