MarkerView no aparece con MPAndroidChart
Estoy utilizando MPandroidchart para mostrar los gráficos de línea en mi aplicación. He añadido código siguiente para mostrar Marker View, pero no se muestra en
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); }
Mi clase CustomMarkerView
- MPAndroidChart LineChart: Uso de fechas en lugar de cadenas para el eje X
- Cómo ocultar los valores del eje x en Barchart de mpandroidChart
- Establecer valores de barras en el centro de la barra en MPAndroid Bar Chart
- MPAndroidChart ¿hay una manera de establecer diferentes colores para diferentes bares?
- Mostrar valores de eje dentro de las barras BarChart de la biblioteca MPAndroidChart
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(); }
}
Nota: Estoy usando fragmento para mostrar gráficos.
- Uso de diferentes etiquetas de eje x para n líneas en un gráfico
- Dibujar línea vertical en el centro de un gráfico de líneas (indicador)
- MPAndroidChart - Las primeras y últimas barras no se representan correctamente
- Bibliotecas de gráficos Android
- MPAndroidChart, cómo eliminar porcentajes decimales y no mostrar porcentajes por debajo de 10?
- MPAndroidChart - Añadir etiquetas al gráfico de barras
- MPAndroidChart LineChart personalizado resaltar dibujable
- No se pudo resolver: com.github.PhilJay: MPAndroidChart: v2.1.4
Tu MarkerView
no se muestra porque no has resaltado ninguna entrada en tu gráfico. MarkerView
sólo se muestra para las entradas que están resaltadas.
Puesto que inhabilitó la funcionalidad para resaltar las entradas por toque (llamando a chart.setHighlightPerTapEnabled(false)
), sólo puede resaltar los valores de forma programática, como esto:
chart.highlightValue(...)
Más sobre eso en la documentación .
Prueba esta clase
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(); } }
Y en Fragment Class, Add
MyMarkerView mv = new MyMarkerView(this.getActivity(), R.layout.custom_marker_view); // set the marker to the chart mChart.setMarkerView(mv);
Que esto te sea útil.
- 'URL del enlace de la aplicación que falta' en la invitación de la aplicación de Facebook
- Inicio La actividad es lenta y la nueva actividad está vacía