MarkerView not showing with MPAndroidChart

I am using MPandroidchart to display line charts in my application. I added the following code to show Marker View, but this isn not Show 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 use a snippet to display charts.

+5
source share
2 answers

Your MarkerView not displayed because you did not MarkerView any entry in your chart. MarkerView displayed only for selected items.

Since you disabled functionality to highlight entries for each click (by calling chart.setHighlightPerTapEnabled(false) ), you can only select values ​​programmatically, for example:

chart.highlightValue(...)

Read more about this in the documentation .

+4
source

try this, class

 import android.content.Context; import android.widget.TextView; import com.github.mikephil.charting.components.MarkerView; import com.github.mikephil.charting.data.CandleEntry; import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.utils.Utils; /** * Custom implementation of the MarkerView. * * @author Philipp Jahoda */ public class MyMarkerView extends MarkerView { private TextView tvContent; public MyMarkerView(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, int dataSetIndex) { 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() { // this will center the marker-view horizontally return -(getWidth() / 2); } @Override public int getYOffset() { // this will cause the marker-view to be above the selected value return -getHeight(); } } 

And in the fragment class add

  MyMarkerView mv = new MyMarkerView(this.getActivity(), R.layout.custom_marker_view); // set the marker to the chart mChart.setMarkerView(mv); 

Let it help you ..

+1
source

Source: https://habr.com/ru/post/1247338/


All Articles