Я использую MPandroidchart для показа линейных диаграмм в моих application.I добавили следующий код, чтобы показать маркер View, но не показывается наMarkerView не отображается с помощью MPAndroidChart
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);
}
Моего CustomMarkerView класса
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();
}
}
Примечание: Я использую фрагмент, чтобы показать диаграммы.