@@ -28,6 +28,7 @@ import com.github.mikephil.charting.data.Entry
2828import com.github.mikephil.charting.data.LineData
2929import com.github.mikephil.charting.data.LineDataSet
3030import com.github.mikephil.charting.formatter.IAxisValueFormatter
31+ import com.github.mikephil.charting.interfaces.datasets.ILineDataSet
3132import io.ticofab.androidgpxparser.parser.domain.Gpx
3233import io.ticofab.androidgpxparser.parser.domain.Track
3334import io.ticofab.androidgpxparser.parser.domain.TrackPoint
@@ -157,6 +158,10 @@ class GpxDetailFragment : Fragment(), WayPointListAdapter.OnItemClickListener,
157158 maxElevation = Double .MIN_VALUE
158159
159160 track.trackSegments?.forEach { segment ->
161+ if (trackDistancePoints.isNotEmpty()) {
162+ trackDistancePoints.add(DistancePoint .Builder ().build())
163+ }
164+ prevTrackPoint = null
160165 segment.trackPoints?.forEach { trackPoint ->
161166 prevTrackPoint?.let { prevPoint ->
162167 totalDistance + = DistanceCalculator .distance(prevPoint, trackPoint)
@@ -256,25 +261,35 @@ class GpxDetailFragment : Fragment(), WayPointListAdapter.OnItemClickListener,
256261 }
257262
258263 private fun setChartData () {
259- val elevationValues = ArrayList <Entry >()
264+ val elevationDataSets = ArrayList <ILineDataSet >()
265+ var elevationValues = ArrayList <Entry >()
260266 for (point in trackDistancePoints) {
261- if (point.distance != null && point.elevation != null ) elevationValues.add(
262- Entry (
263- point.distance.toFloat(),
264- point.elevation.toFloat()
265- )
266- )
267+ val distance = point.distance
268+ val elevation = point.elevation
269+ if (distance != null && elevation != null ) {
270+ elevationValues.add(Entry (distance.toFloat(), elevation.toFloat()))
271+ } else if (elevationValues.isNotEmpty()) {
272+ elevationDataSets.add(createElevationDataSet(elevationValues))
273+ elevationValues = ArrayList ()
274+ }
275+ }
276+ if (elevationValues.isNotEmpty()) {
277+ elevationDataSets.add(createElevationDataSet(elevationValues))
267278 }
268- val elevationDataSet = LineDataSet (elevationValues, getString(R .string.elevation))
279+ val elevationData = LineData (elevationDataSets)
280+ elevationChart.data = elevationData
281+ elevationChart.invalidate()
282+ }
283+
284+ private fun createElevationDataSet (entries : List <Entry >): LineDataSet {
285+ val elevationDataSet = LineDataSet (entries, getString(R .string.elevation))
269286 elevationDataSet.setDrawValues(false )
270287 elevationDataSet.lineWidth = 2f
271288 elevationDataSet.mode = LineDataSet .Mode .CUBIC_BEZIER
272289 elevationDataSet.color = ResourcesCompat .getColor(resources, R .color.colorPrimary, null )
273290 elevationDataSet.setDrawCircles(false )
274291 elevationDataSet.axisDependency = YAxis .AxisDependency .LEFT
275- val elevationData = LineData (elevationDataSet)
276- elevationChart.data = elevationData
277- elevationChart.invalidate()
292+ return elevationDataSet
278293 }
279294
280295 override fun onItemClick (index : Int ) {
0 commit comments