mapbox-plugins-android icon indicating copy to clipboard operation
mapbox-plugins-android copied to clipboard

Line manager won't show lines

Open kikothemaster opened this issue 5 years ago • 2 comments

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 avatar Aug 28 '20 10:08 kikothemaster

Any info about that?

kikothemaster avatar Sep 11 '20 11:09 kikothemaster

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

wprenison avatar Jul 20 '21 20:07 wprenison