diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java b/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java index 97e36ad..1fde51b 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java @@ -66,6 +66,11 @@ import android.widget.TextView; import android.widget.Toast; +import com.jjoe64.graphview.GraphView; +import com.jjoe64.graphview.GridLabelRenderer; +import com.jjoe64.graphview.series.DataPoint; +import com.jjoe64.graphview.series.LineGraphSeries; + import org.osmdroid.api.IMapController; import org.osmdroid.bonuspack.overlays.Marker; import org.osmdroid.bonuspack.overlays.Polyline; @@ -387,13 +392,19 @@ .setAdapter(new HikeListAdapter(MainActivity.this, hikes, points), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - MapView hikeMap = new MapView(MainActivity.this); Polyline hikePath = new Polyline(MainActivity.this); Hike hike = hikes.get(which); List dbPoints = points.get(which); List pathPoints = new ArrayList<>(); + DataPoint[] elevationDataPoints = new DataPoint[dbPoints.size()]; + double min = Double.MAX_VALUE; for(DbGeoPoint dbGeoPoint : dbPoints) { pathPoints.add(new GeoPoint(dbGeoPoint.getLat(), dbGeoPoint.getLon(), dbGeoPoint.getAlt())); + if(dbGeoPoint.getAlt() < min) min = dbGeoPoint.getAlt(); + } + for(int i=0; i< dbPoints.size(); i++) { + DbGeoPoint dbGeoPoint = dbPoints.get(i); + elevationDataPoints[i] = new DataPoint(i, dbGeoPoint.getAlt() - min); } LayoutInflater inflater = getLayoutInflater(); View rowView = inflater.inflate(R.layout.hike_list_detail, null, true); @@ -404,7 +415,8 @@ TextView difficultyView = (TextView) rowView.findViewById(R.id.hike_list_detail_difficulty); TextView upView = (TextView) rowView.findViewById(R.id.hike_list_detail_up); TextView downView = (TextView) rowView.findViewById(R.id.hike_list_detail_down); - LinearLayout contentView = (LinearLayout) rowView.findViewById(R.id.hike_list_detail_inner); + GraphView elevationProfile = (GraphView) rowView.findViewById(R.id.hike_list_detail_elevation_profile); + MapView hikeMap = (MapView) rowView.findViewById(R.id.hike_list_detail_map); titleView.setText(hike.getName()); authorView.setText(String.format(Locale.getDefault(), res.getString(R.string.hike_list_author), hike.getAuthor())); lengthView.setText(String.format(Locale.getDefault(), "Length: %.02fm", hike.getLength())); @@ -425,13 +437,21 @@ difficultyView.setCompoundDrawablesWithIntrinsicBounds(difficultyDrawable, null, null, null); upView.setText(String.format(Locale.getDefault(), "Up: %.02fm", hike.getHeightUp())); downView.setText(String.format(Locale.getDefault(), "Down: %.02fm", hike.getHeightDown())); + LineGraphSeries series = new LineGraphSeries<>(elevationDataPoints); + series.setThickness(1); + elevationProfile.addSeries(series); + GridLabelRenderer labelRenderer = elevationProfile.getGridLabelRenderer(); + labelRenderer.setHorizontalLabelsVisible(false); + labelRenderer.setVerticalLabelsVisible(false); + labelRenderer.setHighlightZeroLines(false); + labelRenderer.setNumHorizontalLabels(2); + labelRenderer.setNumVerticalLabels(2); hikeMap.setTileSource(TileSourceFactory.MAPNIK); hikeMap.setBuiltInZoomControls(true); hikeMap.setMultiTouchControls(true); IMapController hikeMapController = hikeMap.getController(); hikeMapController.setZoom(ZOOM_LEVEL); hikeMapController.setCenter(pathPoints.get(0)); - contentView.addView(hikeMap); AlertDialog detailHikeDialog = new AlertDialog.Builder(MainActivity.this) .setTitle(String.format(Locale.getDefault(), res.getString(R.string.hike_detail_title), hike.getName())) diff --git a/app/src/main/res/layout/hike_list_detail.xml b/app/src/main/res/layout/hike_list_detail.xml index a48594f..7a84945 100644 --- a/app/src/main/res/layout/hike_list_detail.xml +++ b/app/src/main/res/layout/hike_list_detail.xml @@ -22,7 +22,6 @@ + android:orientation="horizontal"> + + \ No newline at end of file