Ich benutze MPAndroidChart (V3.0.1) und ich versuche, eine Möglichkeit zu finden, mehr Informationen anzuzeigen, wenn der Benutzer auf jede Spalte mit einem BarChart tippen.Mit MPandroidChart Anzeige Informationen beim Tippen auf jeden Balken
Jede Spalte enthält eventuell zusätzliche Statistiken, die erst angezeigt werden, nachdem sie angetippt wurden.
Ich habe die Dokumentation gelesen, aber wenn es da ist, habe ich es entweder verpasst oder verstehe einfach nicht, was ich gelesen habe (kein professioneller Programmierer). Hier
ist, was ich für mein Programm so weit gekommen,
public class MainActivity extends AppCompatActivity {
protected BarChart chart;
String[] NameArray = {"a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","a11"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
chart = (BarChart) findViewById(R.id.chart1);
Description desc ;
Legend L;
L = chart.getLegend();
desc = chart.getDescription();
desc.setText("");
L.setEnabled(false);
YAxis leftAxis = chart.getAxisLeft();
YAxis rightAxis = chart.getAxisRight();
XAxis xAxis = chart.getXAxis();
xAxis.setPosition(XAxisPosition.BOTTOM);
xAxis.setTextSize(10f);
xAxis.setDrawAxisLine(true);
xAxis.setDrawGridLines(false);
xAxis.setDrawLabels(true);
xAxis.setValueFormatter(new MyXAxisValueFormatter(NameArray));
leftAxis.setTextSize(10f);
leftAxis.setDrawLabels(false);
leftAxis.setDrawAxisLine(true);
leftAxis.setDrawGridLines(false);
rightAxis.setDrawAxisLine(false);
rightAxis.setDrawGridLines(false);
rightAxis.setDrawLabels(false);
BarData data = new BarData( setData());
data.setBarWidth(0.9f); // set custom bar width
chart.setData(data);
chart.setFitBars(true); // make the x-axis fit exactly all bars
chart.invalidate(); // refresh
chart.setScaleEnabled(false);
chart.setDoubleTapToZoomEnabled(false);
chart.setBackgroundColor(Color.rgb(255, 255, 255));
chart.animateXY(2000, 2000);
chart.setDrawBorders(false);
chart.setDescription(desc);
chart.setDrawValueAboveBar(true);//
}
private BarDataSet setData() {
ArrayList<BarEntry> entries = new ArrayList<>();
entries.add(new BarEntry(0f, 30f, "VB"));
entries.add(new BarEntry(1f, 80f, "V0"));
entries.add(new BarEntry(2f, 60f, "V1"));
entries.add(new BarEntry(3f, 50f, "V2"));
entries.add(new BarEntry(4f, 70f, "V3"));
entries.add(new BarEntry(5f, 60f, "V4"));
BarDataSet set = new BarDataSet(entries,"");
set.setValueTextColor(Color.rgb(155, 155, 155));
set.setValueFormatter(new MyValueFormatter());
set.setColor(Color.rgb(155, 155, 155));
return set;
}
public class MyValueFormatter implements IValueFormatter{
@Override
public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler)
{
return "V" + (int)value;
}
}
public class MyXAxisValueFormatter implements IAxisValueFormatter {
private String[] mValues;
private MyXAxisValueFormatter(String[] values) {
this.mValues = values;
}
@Override
public String getFormattedValue(float value, AxisBase axis) {
return mValues[(int) value];
}
}
Simplified Frage
Wenn der Benutzer tippt eine der Spalten von Daten in der Tabelle, würde Ich mag meine TextViews (nicht in meinem Code), um zusätzliche Informationen über die Spalte anzuzeigen, z. B. den Durchschnitt und die Varianz der Datenspalte.
Ich habe schon versucht, diese Umsetzung, aber meine onCreate() -Methode ist mir ein Fehler geben: Fehler: (63, 47) Fehler: inkompatible Typen: MainActivity nicht zu OnChartValueSelectedListener umgewandelt werden kann – Diesel
auch benötigt Hinzufügen von "implementiert OnChartValueSelectedListener" zu meiner MainActivity wie folgt: "öffentliche Klasse MainActivity erweitert AppCompatActivity implementiert OnChartValueSelectedListener { ". – Diesel