use of com.github.mikephil.charting.charts.LineChart in project Osmand by osmandapp.
the class TrackDetailsMenu method updateView.
private void updateView(final View parentView) {
GPXTrackAnalysis analysis = gpxItem.analysis;
if (analysis == null || gpxItem.chartTypes == null) {
parentView.setVisibility(View.GONE);
if (analysis != null && analysis.isBoundsCalculated()) {
mapActivity.getMapView().fitRectToMap(analysis.left, analysis.right, analysis.top, analysis.bottom, 0, 0, 0);
}
return;
}
final LineChart chart = (LineChart) parentView.findViewById(R.id.chart);
chart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
@Override
public void onValueSelected(Entry e, Highlight h) {
refreshChart(chart, false);
}
@Override
public void onNothingSelected() {
}
});
chart.setOnChartGestureListener(new OnChartGestureListener() {
boolean hasTranslated = false;
float highlightDrawX = -1;
@Override
public void onChartGestureStart(MotionEvent me, ChartGesture lastPerformedGesture) {
hasTranslated = false;
if (chart.getHighlighted() != null && chart.getHighlighted().length > 0) {
highlightDrawX = chart.getHighlighted()[0].getDrawX();
} else {
highlightDrawX = -1;
}
}
@Override
public void onChartGestureEnd(MotionEvent me, ChartGesture lastPerformedGesture) {
if ((lastPerformedGesture == ChartGesture.DRAG && hasTranslated) || lastPerformedGesture == ChartGesture.X_ZOOM || lastPerformedGesture == ChartGesture.Y_ZOOM || lastPerformedGesture == ChartGesture.PINCH_ZOOM || lastPerformedGesture == ChartGesture.DOUBLE_TAP || lastPerformedGesture == ChartGesture.ROTATE) {
gpxItem.chartMatrix = new Matrix(chart.getViewPortHandler().getMatrixTouch());
refreshChart(chart, true);
}
}
@Override
public void onChartLongPressed(MotionEvent me) {
}
@Override
public void onChartDoubleTapped(MotionEvent me) {
}
@Override
public void onChartSingleTapped(MotionEvent me) {
}
@Override
public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY) {
}
@Override
public void onChartScale(MotionEvent me, float scaleX, float scaleY) {
}
@Override
public void onChartTranslate(MotionEvent me, float dX, float dY) {
hasTranslated = true;
if (highlightDrawX != -1) {
Highlight h = chart.getHighlightByTouchPoint(highlightDrawX, 0f);
if (h != null) {
chart.highlightValue(h);
refreshChart(chart, false);
}
}
}
});
final OsmandApplication app = mapActivity.getMyApplication();
final IconsCache ic = app.getIconsCache();
GpxUiHelper.setupGPXChart(app, chart, 4);
List<ILineDataSet> dataSets = new ArrayList<>();
if (gpxItem.chartTypes != null && gpxItem.chartTypes.length > 0) {
for (int i = 0; i < gpxItem.chartTypes.length; i++) {
OrderedLineDataSet dataSet = null;
switch(gpxItem.chartTypes[i]) {
case ALTITUDE:
dataSet = GpxUiHelper.createGPXElevationDataSet(app, chart, analysis, gpxItem.chartAxisType, false, true);
break;
case SPEED:
dataSet = GpxUiHelper.createGPXSpeedDataSet(app, chart, analysis, gpxItem.chartAxisType, gpxItem.chartTypes.length > 1, true);
break;
case SLOPE:
dataSet = GpxUiHelper.createGPXSlopeDataSet(app, chart, analysis, gpxItem.chartAxisType, null, gpxItem.chartTypes.length > 1, true);
break;
}
if (dataSet != null) {
dataSets.add(dataSet);
}
}
}
Collections.sort(dataSets, new Comparator<ILineDataSet>() {
@Override
public int compare(ILineDataSet ds1, ILineDataSet ds2) {
OrderedLineDataSet dataSet1 = (OrderedLineDataSet) ds1;
OrderedLineDataSet dataSet2 = (OrderedLineDataSet) ds2;
return dataSet1.getPriority() > dataSet2.getPriority() ? -1 : (dataSet1.getPriority() == dataSet2.getPriority() ? 0 : 1);
}
});
chart.setData(new LineData(dataSets));
updateChart(chart);
View yAxis = parentView.findViewById(R.id.y_axis);
ImageView yAxisIcon = (ImageView) parentView.findViewById(R.id.y_axis_icon);
TextView yAxisTitle = (TextView) parentView.findViewById(R.id.y_axis_title);
View yAxisArrow = parentView.findViewById(R.id.y_axis_arrow);
final List<GPXDataSetType[]> availableTypes = new ArrayList<>();
boolean hasSlopeChart = false;
if (analysis.hasElevationData) {
availableTypes.add(new GPXDataSetType[] { GPXDataSetType.ALTITUDE });
if (gpxItem.chartAxisType != GPXDataSetAxisType.TIME) {
availableTypes.add(new GPXDataSetType[] { GPXDataSetType.SLOPE });
}
}
if (analysis.hasSpeedData) {
availableTypes.add(new GPXDataSetType[] { GPXDataSetType.SPEED });
}
if (analysis.hasElevationData && gpxItem.chartAxisType != GPXDataSetAxisType.TIME) {
availableTypes.add(new GPXDataSetType[] { GPXDataSetType.ALTITUDE, GPXDataSetType.SLOPE });
}
if (analysis.hasElevationData && analysis.hasSpeedData) {
availableTypes.add(new GPXDataSetType[] { GPXDataSetType.ALTITUDE, GPXDataSetType.SPEED });
}
for (GPXDataSetType t : gpxItem.chartTypes) {
if (t == GPXDataSetType.SLOPE) {
hasSlopeChart = true;
break;
}
}
yAxisIcon.setImageDrawable(GPXDataSetType.getImageDrawable(app, gpxItem.chartTypes));
yAxisTitle.setText(GPXDataSetType.getName(app, gpxItem.chartTypes));
if (availableTypes.size() > 0) {
yAxis.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final PopupMenu optionsMenu = new PopupMenu(mapActivity, v);
DirectionsDialogs.setupPopUpMenuIcon(optionsMenu);
for (final GPXDataSetType[] types : availableTypes) {
MenuItem menuItem = optionsMenu.getMenu().add(GPXDataSetType.getName(app, types)).setIcon(GPXDataSetType.getImageDrawable(app, types));
menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem mItem) {
gpxItem.chartTypes = types;
update();
return true;
}
});
}
optionsMenu.show();
}
});
yAxisArrow.setVisibility(View.VISIBLE);
} else {
yAxis.setOnClickListener(null);
yAxis.setBackgroundResource(0);
yAxisArrow.setVisibility(View.GONE);
}
View xAxis = parentView.findViewById(R.id.x_axis);
ImageView xAxisIcon = (ImageView) parentView.findViewById(R.id.x_axis_icon);
TextView xAxisTitle = (TextView) parentView.findViewById(R.id.x_axis_title);
View xAxisArrow = parentView.findViewById(R.id.x_axis_arrow);
if (gpxItem.chartAxisType == GPXDataSetAxisType.TIME) {
xAxisIcon.setImageDrawable(ic.getThemedIcon(R.drawable.ic_action_time));
xAxisTitle.setText(app.getString(R.string.shared_string_time));
} else {
xAxisIcon.setImageDrawable(ic.getThemedIcon(R.drawable.ic_action_marker_dark));
xAxisTitle.setText(app.getString(R.string.distance));
}
if (analysis.isTimeSpecified() && !hasSlopeChart) {
xAxis.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final PopupMenu optionsMenu = new PopupMenu(mapActivity, v);
DirectionsDialogs.setupPopUpMenuIcon(optionsMenu);
final GPXDataSetAxisType type;
if (gpxItem.chartAxisType == GPXDataSetAxisType.TIME) {
type = GPXDataSetAxisType.DISTANCE;
} else {
type = GPXDataSetAxisType.TIME;
}
MenuItem menuItem = optionsMenu.getMenu().add(type.getStringId()).setIcon(type.getImageDrawable(app));
menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem mItem) {
gpxItem.chartAxisType = type;
gpxItem.chartHighlightPos = -1;
gpxItem.chartMatrix = null;
update();
return true;
}
});
optionsMenu.show();
}
});
xAxisArrow.setVisibility(View.VISIBLE);
} else {
xAxis.setOnClickListener(null);
xAxis.setBackgroundResource(0);
xAxisArrow.setVisibility(View.GONE);
}
refreshChart(chart, true);
}
use of com.github.mikephil.charting.charts.LineChart in project Walrus by megabug.
the class Proxmark3TuneResultActivity method onCreate.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_proxmark3_tune_results);
Proxmark3Device.TuneResult tuneResult = (Proxmark3Device.TuneResult) getIntent().getSerializableExtra(EXTRA_TUNE_RESULT);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
ActionBar actionBar = getSupportActionBar();
if (actionBar != null)
actionBar.setDisplayHomeAsUpEnabled(true);
if (tuneResult.lf) {
setResultInfo(tuneResult.peak_v, 2.948f, 14.730f, R.id.lfOk);
((TextView) findViewById(R.id.lf125)).setText(getResources().getString(R.string.tune_voltage, tuneResult.v_125));
((TextView) findViewById(R.id.lf134)).setText(getResources().getString(R.string.tune_voltage, tuneResult.v_134));
((TextView) findViewById(R.id.lfOptimal)).setText(getResources().getString(R.string.tune_peak_voltage, tuneResult.peak_v, (tuneResult.peak_f / 1000)));
LineChart lfChart = findViewById(R.id.lfChart);
if (tuneResult.v_LF != null) {
List<Entry> entries = new ArrayList<>();
for (int i = 255; i >= 19; --i) entries.add(new Entry(12e6f / (i + 1) / 1e3f, tuneResult.v_LF[i]));
LineDataSet lineDataSet = new LineDataSet(entries, getString(R.string.lf));
lineDataSet.setColor(Color.BLACK);
lineDataSet.setCircleColor(Color.BLUE);
LineData lineData = new LineData(lineDataSet);
lfChart.setData(lineData);
lfChart.setDescription(null);
lfChart.getLegend().setEnabled(false);
lfChart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);
lfChart.getAxisRight().setEnabled(false);
lfChart.invalidate();
} else
lfChart.setVisibility(View.GONE);
} else
findViewById(R.id.lf).setVisibility(View.GONE);
if (tuneResult.hf) {
setResultInfo(tuneResult.v_HF, 3.167f, 7.917f, R.id.hfOk);
((TextView) findViewById(R.id.hfV)).setText(getResources().getString(R.string.tune_voltage, tuneResult.v_HF));
} else
findViewById(R.id.hf).setVisibility(View.GONE);
}
use of com.github.mikephil.charting.charts.LineChart in project Osmand by osmandapp.
the class ShowRouteInfoDialogFragment method buildHeader.
private void buildHeader(View headerView) {
OsmandApplication app = getMyApplication();
final LineChart mChart = (LineChart) headerView.findViewById(R.id.chart);
GpxUiHelper.setupGPXChart(app, mChart, 4);
mChart.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
listView.requestDisallowInterceptTouchEvent(true);
return false;
}
});
GPXTrackAnalysis analysis = gpx.getAnalysis(0);
if (analysis.hasElevationData) {
List<ILineDataSet> dataSets = new ArrayList<>();
elevationDataSet = GpxUiHelper.createGPXElevationDataSet(app, mChart, analysis, GPXDataSetAxisType.DISTANCE, false, true);
if (elevationDataSet != null) {
dataSets.add(elevationDataSet);
}
slopeDataSet = GpxUiHelper.createGPXSlopeDataSet(app, mChart, analysis, GPXDataSetAxisType.DISTANCE, elevationDataSet.getValues(), true, true);
if (slopeDataSet != null) {
dataSets.add(slopeDataSet);
}
LineData data = new LineData(dataSets);
mChart.setData(data);
mChart.setOnChartGestureListener(new OnChartGestureListener() {
float highlightDrawX = -1;
@Override
public void onChartGestureStart(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
if (mChart.getHighlighted() != null && mChart.getHighlighted().length > 0) {
highlightDrawX = mChart.getHighlighted()[0].getDrawX();
} else {
highlightDrawX = -1;
}
}
@Override
public void onChartGestureEnd(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
gpxItem.chartMatrix = new Matrix(mChart.getViewPortHandler().getMatrixTouch());
Highlight[] highlights = mChart.getHighlighted();
if (highlights != null && highlights.length > 0) {
gpxItem.chartHighlightPos = highlights[0].getX();
} else {
gpxItem.chartHighlightPos = -1;
}
}
@Override
public void onChartLongPressed(MotionEvent me) {
}
@Override
public void onChartDoubleTapped(MotionEvent me) {
}
@Override
public void onChartSingleTapped(MotionEvent me) {
}
@Override
public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY) {
}
@Override
public void onChartScale(MotionEvent me, float scaleX, float scaleY) {
}
@Override
public void onChartTranslate(MotionEvent me, float dX, float dY) {
if (highlightDrawX != -1) {
Highlight h = mChart.getHighlightByTouchPoint(highlightDrawX, 0f);
if (h != null) {
mChart.highlightValue(h);
}
}
}
});
mChart.setVisibility(View.VISIBLE);
} else {
elevationDataSet = null;
slopeDataSet = null;
mChart.setVisibility(View.GONE);
}
((TextView) headerView.findViewById(R.id.average_text)).setText(OsmAndFormatter.getFormattedAlt(analysis.avgElevation, app));
String min = OsmAndFormatter.getFormattedAlt(analysis.minElevation, app);
String max = OsmAndFormatter.getFormattedAlt(analysis.maxElevation, app);
((TextView) headerView.findViewById(R.id.range_text)).setText(min + " - " + max);
String asc = OsmAndFormatter.getFormattedAlt(analysis.diffElevationUp, app);
String desc = OsmAndFormatter.getFormattedAlt(analysis.diffElevationDown, app);
((TextView) headerView.findViewById(R.id.descent_text)).setText(desc);
((TextView) headerView.findViewById(R.id.ascent_text)).setText(asc);
((ImageView) headerView.findViewById(R.id.average_icon)).setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_action_altitude_average));
((ImageView) headerView.findViewById(R.id.range_icon)).setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_action_altitude_average));
((ImageView) headerView.findViewById(R.id.descent_icon)).setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_action_altitude_descent));
((ImageView) headerView.findViewById(R.id.ascent_icon)).setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_action_altitude_ascent));
headerView.findViewById(R.id.details_view).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openDetails();
}
});
}
use of com.github.mikephil.charting.charts.LineChart in project crypto-android by lizitca.
the class DetailScreenActivity method onCreate.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail_screen);
// Toolbar toolbar = findViewById(R.id.toolbar);
// setSupportActionBar(toolbar);
currencyName = getIntent().getStringExtra("currencyName");
setTitle(currencyName);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
mChart = new DetailScreenChart((LineChart) findViewById(R.id.chart), currencyName);
mChart.initialize();
ListView lvMain = (ListView) findViewById(R.id.lvData);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values);
lvMain.setAdapter(adapter);
}
use of com.github.mikephil.charting.charts.LineChart in project Roblu by wdavies973.
the class RMetricToUI method generateLineChart.
/*
* Statistics!
*/
public CardView generateLineChart(String metricName, LinkedHashMap<String, Double> data) {
LineChart chart = new LineChart(activity);
chart.setNoDataTextColor(rui.getText());
chart.getXAxis().setValueFormatter(new MyAxisValueFormatter(data));
chart.getXAxis().setTextColor(rui.getText());
chart.getXAxis().setGranularity(1f);
chart.getAxis(YAxis.AxisDependency.LEFT).setTextColor(rui.getText());
chart.getAxis(YAxis.AxisDependency.RIGHT).setTextColor(rui.getText());
chart.getLegend().setTextColor(rui.getText());
chart.getLegend().setTextSize(15f);
chart.setMinimumHeight(1000);
chart.getDescription().setEnabled(false);
List<Entry> entries = new ArrayList<>();
// Calculate average also
double sum = 0;
int index = 0;
for (Object o : data.keySet()) {
entries.add(new Entry(index, data.get(o.toString()).floatValue()));
sum += data.get(o.toString()).floatValue();
index++;
}
// Calculate the average
String average = "\n(Average: " + Utils.round(sum / (double) data.size(), 2) + ")";
LineDataSet set = new LineDataSet(entries, metricName + average);
set.setValueTextSize(12f);
set.setValueTextColor(rui.getText());
LineData lineData = new LineData(set);
chart.setData(lineData);
chart.invalidate();
return getCard(chart);
}
Aggregations