diff --git a/OsmAnd/res/layout/gpx_item_list_item.xml b/OsmAnd/res/layout/gpx_item_list_item.xml
index a5d5c6ed7d..5c003f3e6d 100644
--- a/OsmAnd/res/layout/gpx_item_list_item.xml
+++ b/OsmAnd/res/layout/gpx_item_list_item.xml
@@ -52,6 +52,7 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
+
-
diff --git a/OsmAnd/src/net/osmand/plus/myplaces/ElevationView.java b/OsmAnd/src/net/osmand/plus/myplaces/ElevationView.java
deleted file mode 100644
index be2b71b19f..0000000000
--- a/OsmAnd/src/net/osmand/plus/myplaces/ElevationView.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package net.osmand.plus.myplaces;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.Typeface;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.widget.ImageView;
-
-import net.osmand.plus.GPXUtilities;
-import net.osmand.plus.R;
-import net.osmand.plus.OsmandApplication;
-import net.osmand.plus.OsmandSettings.MetricsConstants;
-
-import java.util.List;
-
-/**
- * Created by maw on 02.09.15., original credit goes to gibbsnich
- * Developed further by Hardy 2016-11
- */
-public class ElevationView extends ImageView {
-
- double maxElevation, minElevation;
- float xDistance;
- List elevationList;
-
- private OsmandApplication app;
- private MetricsConstants mc;
-
- public ElevationView(Context ctx, AttributeSet as) {
- super(ctx, as);
- app = (OsmandApplication) ctx.getApplicationContext();
- mc = app.getSettings().METRIC_SYSTEM.get();
- }
-
- public void onDraw(Canvas canvas) {
- final float screenScale = getResources().getDisplayMetrics().density;
-
- final boolean useFeet = (mc == MetricsConstants.MILES_AND_FEET) || (mc == MetricsConstants.MILES_AND_YARDS);
- final String unit = useFeet ? app.getString(R.string.foot) : app.getString(R.string.m);
- int stepBase = useFeet ? 200 : 100;
- final float convEle = useFeet ? 3.28084f : 1.0f;
-
- final int maxBase = ((int)Math.floor((maxElevation * convEle / stepBase) + 1)) * stepBase;
- final int minBase = (int)Math.floor((minElevation * convEle / stepBase)) * stepBase;
- final float yDistance = maxBase - minBase;
- if ((!useFeet && (yDistance <= 100)) || (useFeet && (yDistance <= 200))) { //Draw 50m/100ft markers for smallest scale
- stepBase = stepBase/2;
- }
- final float xPer = (float)canvas.getWidth() / xDistance;
- final float yPer = (float)canvas.getHeight() / yDistance;
- final float canvasRight = (float)canvas.getWidth() - 1f;
- final float canvasBottom = (float)canvas.getHeight() - 1f;
-
- // This y transform apparently needed to assure top and bottom lines show up on all devices
- final float yOffset = 2f;
- final float ySlope = ((float)canvas.getHeight() - 2f * yOffset) / (float)canvas.getHeight();
-
- Paint barPaint = new Paint();
- barPaint.setColor(getResources().getColor(R.color.dialog_inactive_text_color_dark));
- barPaint.setTextSize((int)(16f * screenScale + 0.5f));
- barPaint.setTypeface(Typeface.create(Typeface.DEFAULT_BOLD, Typeface.BOLD));
- float yTextLast = 9999f;
- for (int i = minBase; i <= maxBase ; i += stepBase) {
- float y = yOffset + ySlope * (canvasBottom - yPer * (float)(i - minBase));
- canvas.drawLine(0, y, canvasRight, y, barPaint);
- if ((yTextLast - y) >= (int)(32f * screenScale + 0.5f)) { // Overlap prevention
- canvas.drawText(String.valueOf(i) + " " + unit, (int)(8f * screenScale + 0.5f), y - (int)(2f * screenScale + 0.5f), barPaint);
- yTextLast = y;
- }
- }
-
- float lastX = 0, lastY = 0;
- float xDistSum = 0;
-
- Paint paint = new Paint();
- paint.setColor(getResources().getColor(R.color.gpx_altitude_asc));
- paint.setStrokeWidth((int)(2f * screenScale + 0.5f));
- boolean first = true;
- if (elevationList != null) {
- for (GPXUtilities.Elevation elevation : elevationList) {
- xDistSum += elevation.distance;
- float nextX = xPer * xDistSum;
- float nextY = yOffset + ySlope * (canvasBottom - yPer * (float)(elevation.elevation * convEle - minBase));
- if (first) {
- first = false;
- } else {
- canvas.drawLine(lastX, lastY, nextX, nextY, paint);
- }
- lastX = nextX;
- lastY = nextY;
- }
- }
- }
-
- public void setElevationData(List elevationData) {
- elevationList = elevationData;
- }
-
- public void setMaxElevation(double max) {
- maxElevation = max;
- }
-
- public void setMinElevation(double min) {
- minElevation = min;
- }
-
- public void setTotalDistance(float dist) {
- xDistance = dist;
- }
-
-}
-
diff --git a/OsmAnd/src/net/osmand/plus/myplaces/SelectedGPXFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/SelectedGPXFragment.java
index 87be59b389..4b9517193b 100644
--- a/OsmAnd/src/net/osmand/plus/myplaces/SelectedGPXFragment.java
+++ b/OsmAnd/src/net/osmand/plus/myplaces/SelectedGPXFragment.java
@@ -471,9 +471,46 @@ public class SelectedGPXFragment extends OsmAndListFragment {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
+ LineChart mChart = null;
+ final boolean useFeet = (mc == MetricsConstants.MILES_AND_FEET) || (mc == MetricsConstants.MILES_AND_YARDS);
if (row == null) {
LayoutInflater inflater = getMyActivity().getLayoutInflater();
row = inflater.inflate(R.layout.gpx_item_list_item, parent, false);
+
+ mChart = (LineChart) row.findViewById(R.id.chart);
+ //mChart.setHardwareAccelerationEnabled(true);
+ mChart.setTouchEnabled(true);
+ mChart.setDragEnabled(true);
+ mChart.setScaleEnabled(true);
+ mChart.setPinchZoom(true);
+ mChart.setScaleYEnabled(false);
+ mChart.setAutoScaleMinMaxEnabled(true);
+ mChart.setDrawBorders(false);
+ mChart.getDescription().setEnabled(false);
+ mChart.setMaxVisibleValueCount(10);
+
+ // create a custom MarkerView (extend MarkerView) and specify the layout
+ // to use for it
+ MyMarkerView mv = new MyMarkerView(getActivity(), R.layout.chart_marker_view, useFeet);
+ mv.setChartView(mChart); // For bounds control
+ mChart.setMarker(mv); // Set the marker to the chart
+ mChart.setDrawMarkers(true);
+
+ XAxis xAxis = mChart.getXAxis();
+ xAxis.setDrawAxisLine(false);
+ xAxis.setDrawGridLines(false);
+ xAxis.setDrawAxisLine(false);
+ xAxis.setPosition(BOTTOM);
+
+ YAxis yAxis = mChart.getAxisLeft();
+ yAxis.enableGridDashedLine(10f, 5f, 0f);
+ yAxis.setGridColor(ActivityCompat.getColor(getActivity(), R.color.divider_color));
+ yAxis.setDrawAxisLine(false);
+
+ Legend legend = mChart.getLegend();
+ legend.setEnabled(false);
+
+ mChart.getAxisRight().setEnabled(false);
}
GpxDisplayItem child = getItem(position);
TextView label = (TextView) row.findViewById(R.id.name);
@@ -514,116 +551,68 @@ public class SelectedGPXFragment extends OsmAndListFragment {
description.setVisibility(View.GONE);
}
- final LineChart mChart = (LineChart) row.findViewById(R.id.chart);
- //mChart.setHardwareAccelerationEnabled(true);
- mChart.setTouchEnabled(true);
- mChart.setDragEnabled(true);
- mChart.setScaleEnabled(true);
- mChart.setPinchZoom(true);
- mChart.setScaleYEnabled(false);
- mChart.setAutoScaleMinMaxEnabled(true);
- mChart.setDrawBorders(false);
- mChart.getDescription().setEnabled(false);
- mChart.setMaxVisibleValueCount(10);
+ if (mChart != null) {
+ if (child.analysis != null && child.analysis.elevationData != null && child.analysis.isElevationSpecified() && (child.analysis.totalDistance > 0)) {
- final boolean useFeet = (mc == MetricsConstants.MILES_AND_FEET) || (mc == MetricsConstants.MILES_AND_YARDS);
- // create a custom MarkerView (extend MarkerView) and specify the layout
- // to use for it
- MyMarkerView mv = new MyMarkerView(getActivity(), R.layout.chart_marker_view, useFeet);
- mv.setChartView(mChart); // For bounds control
- mChart.setMarker(mv); // Set the marker to the chart
- mChart.setDrawMarkers(true);
-
- XAxis xAxis = mChart.getXAxis();
- xAxis.setDrawAxisLine(false);
- xAxis.setDrawGridLines(false);
- xAxis.setDrawAxisLine(false);
- xAxis.setPosition(BOTTOM);
-
- YAxis yAxis = mChart.getAxisLeft();
- yAxis.enableGridDashedLine(10f, 5f, 0f);
- yAxis.setGridColor(ActivityCompat.getColor(getActivity(), R.color.divider_color));
- yAxis.setDrawAxisLine(false);
-
- Legend legend = mChart.getLegend();
- legend.setEnabled(false);
-
- mChart.getAxisRight().setEnabled(false);
-
- if (child.analysis != null && child.analysis.elevationData != null && child.analysis.isElevationSpecified() && (child.analysis.totalDistance > 0)) {
-
- if (child.analysis.minElevation >= 0) {
- yAxis.setAxisMinimum(0f);
- }
-
- final float convEle = useFeet ? 3.28084f : 1.0f;
- final float divX = child.analysis.totalDistance > 1000 ? 1000f : 1f;
-
- ArrayList values = new ArrayList<>();
- List elevationData = child.analysis.elevationData;
- float nextX = 0;
- float nextY;
- for (Elevation e : elevationData) {
- if (e.distance > 0) {
- nextX += (float) e.distance / divX;
- nextY = (float) (e.elevation * convEle);
- values.add(new Entry(nextX, nextY));
+ if (child.analysis.minElevation >= 0) {
+ //mChart.getAxisLeft().setAxisMinimum(0f);
}
+
+ final float convEle = useFeet ? 3.28084f : 1.0f;
+ final float divX = child.analysis.totalDistance > 1000 ? 1000f : 1f;
+
+ ArrayList values = new ArrayList<>();
+ List elevationData = child.analysis.elevationData;
+ float nextX = 0;
+ float nextY;
+ for (Elevation e : elevationData) {
+ if (e.distance > 0) {
+ nextX += (float) e.distance / divX;
+ nextY = (float) (e.elevation * convEle);
+ values.add(new Entry(nextX, nextY));
+ }
+ }
+
+ LineDataSet dataSet = new LineDataSet(values, "");
+
+ dataSet.setColor(Color.BLACK);
+ dataSet.setDrawValues(false);
+ dataSet.setLineWidth(0f);
+ dataSet.setValueTextSize(9f);
+ dataSet.setDrawFilled(true);
+ dataSet.setFormLineWidth(1f);
+ dataSet.setFormSize(15.f);
+
+ dataSet.setDrawCircles(false);
+ dataSet.setDrawCircleHole(false);
+
+ dataSet.setHighlightEnabled(true);
+ dataSet.setDrawVerticalHighlightIndicator(true);
+ dataSet.setDrawHorizontalHighlightIndicator(false);
+ dataSet.setHighLightColor(Color.BLACK);
+
+ if (Utils.getSDKInt() >= 18) {
+ // fill drawable only supported on api level 18 and above
+ Drawable drawable = ContextCompat.getDrawable(getActivity(), R.drawable.line_chart_fade_orange);
+ dataSet.setFillDrawable(drawable);
+ } else {
+ dataSet.setFillColor(ContextCompat.getColor(getActivity(), R.color.osmand_orange));
+ }
+ ArrayList dataSets = new ArrayList();
+ dataSets.add(dataSet); // add the datasets
+
+ // create a data object with the datasets
+ LineData data = new LineData(dataSets);
+
+ // set data
+ mChart.setData(data);
+
+ mChart.setVisibility(View.VISIBLE);
+ } else {
+ mChart.setVisibility(View.GONE);
}
-
- LineDataSet dataSet = new LineDataSet(values, "");
-
- dataSet.setColor(Color.BLACK);
- dataSet.setDrawValues(false);
- //set1.setCircleColor(Color.BLACK);
- dataSet.setLineWidth(0f);
- dataSet.setValueTextSize(9f);
- dataSet.setDrawFilled(true);
- dataSet.setFormLineWidth(1f);
- dataSet.setFormSize(15.f);
-
- dataSet.setDrawCircles(false);
- dataSet.setDrawCircleHole(false);
-
- dataSet.setHighlightEnabled(true); // allow highlighting for DataSet
- // set this to false to disable the drawing of highlight indicator (lines)
- dataSet.setDrawVerticalHighlightIndicator(true);
- dataSet.setDrawHorizontalHighlightIndicator(false);
- dataSet.setHighLightColor(Color.BLACK); // color for highlight indicator
-
- if (Utils.getSDKInt() >= 18) {
- // fill drawable only supported on api level 18 and above
- Drawable drawable = ContextCompat.getDrawable(getActivity(), R.drawable.line_chart_fade_orange);
- dataSet.setFillDrawable(drawable);
- }
- else {
- dataSet.setFillColor(ContextCompat.getColor(getActivity(), R.color.osmand_orange));
- }
- ArrayList dataSets = new ArrayList();
- dataSets.add(dataSet); // add the datasets
-
- // create a data object with the datasets
- LineData data = new LineData(dataSets);
-
- // set data
- mChart.setData(data);
-
- mChart.setVisibility(View.VISIBLE);
- } else {
- mChart.setVisibility(View.GONE);
}
- /*
- ElevationView elevationImg = (ElevationView) row.findViewById(R.id.elevation);
- if (child.analysis != null && child.analysis.elevationData != null && child.analysis.isElevationSpecified() && (child.analysis.totalDistance > 0)) {
- elevationImg.setElevationData(child.analysis.elevationData);
- elevationImg.setMaxElevation(child.analysis.maxElevation);
- elevationImg.setMinElevation(child.analysis.minElevation);
- elevationImg.setTotalDistance(child.analysis.totalDistance); //Use raw data for graph, not channel detection noise filter (facilitates visual double check)
- elevationImg.setVisibility(View.VISIBLE);
- } else {
- elevationImg.setVisibility(View.GONE);
- }
- */
+
return row;
}