I am using MPandroidchart for showing line charts in my application.I have added following code to show Marker View, but it isn't showing on
private void initializeChart(LineChart chart, String chartName) {
// Chart view
chart.setDrawGridBackground(false);
chart.setDescription("");
chart.getLegend().setEnabled(true);
//chart.setTouchEnabled(false);
int color = getResources().getColor(R.color.white);
chart.getAxisLeft().setTextColor(color); // left y-axis
chart.getXAxis().setTextColor(color);
chart.setTouchEnabled(true);
CustomMarkerView mv = new CustomMarkerView(this.getActivity(), R.layout.marker_view_tv);
chart.setMarkerView(mv);
//X axis
XAxis xAxis = chart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setDrawGridLines(false);
xAxis.setDrawLabels(true);
//Y axis
YAxis leftAxis = chart.getAxisLeft();
YAxis rightAxis = chart.getAxisRight();
rightAxis.setDrawLabels(false);
rightAxis.setDrawGridLines(false);
leftAxis.setDrawLabels(true);
leftAxis.setDrawGridLines(false);
leftAxis.setStartAtZero(false);
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getActivity());
leftAxis.setLabelCount(Constants.KEY_LINE_YAXIS_SCALECOUNT, true);
ChartItem item = CannonJsonParser.parseCanonJson(act, act.res);
int maxYVal = pref.getInt(Constants.KEY_YAXIS_VALUE, 0);
leftAxis.setAxisMaxValue(maxYVal);
leftAxis.setAxisMinValue(0);
setLineData(item, chartName);
// set data
chart.setData(lineData);
chart.getLegend().setEnabled(false);
//animate
//chart.animateX(2000, Easing.EasingOption.EaseInExpo);
chart.setDragEnabled(true);
chart.setScaleXEnabled(true);
chart.setScaleYEnabled(false);
chart.setHighlightPerDragEnabled(false);
chart.setHighlightPerTapEnabled(false);
}
My CustomMarkerView class
public class CustomMarkerView extends MarkerView {
private TextView tvContent;
public CustomMarkerView(Context context, int layoutResource) {
super(context, layoutResource);
tvContent = (TextView) findViewById(R.id.tvContent);
}
// callbacks everytime the MarkerView is redrawn, can be used to update the
// content (user-interface)
@Override
public void refreshContent(Entry e, Highlight highlight) {
if (e instanceof CandleEntry) {
CandleEntry ce = (CandleEntry) e;
tvContent.setText("" + Utils.formatNumber(ce.getHigh(), 0, true));
} else {
tvContent.setText("" + Utils.formatNumber(e.getVal(), 0, true));
}
}
@Override
public int getXOffset(float xpos) {
// this will center the marker-view horizontally
return -(getWidth() / 2);
}
@Override
public int getYOffset(float ypos) {
// this will cause the marker-view to be above the selected value
return -getHeight();
}
}
Note: I am using fragment to show charts.
Your MarkerView
is not showing because you have not highlighted any entry in your chart. The MarkerView
is only displayed for entries that are highlighted.
Since you disabled the functionality to highlight entries per tap (by calling chart.setHighlightPerTapEnabled(false)
), you can only highlight values programmatically, like this:
chart.highlightValue(...)
More on that in the documentation.