Code: Select all
Map genreData = new LinkedHashMap();
genreData.put("Pop", 19);
genreData.put("Hip-Hop", 19);
genreData.put("Rock", 19);
genreData.put("Dance", 21);
genreData.put("R&B", 21);
if (genreData != null && !genreData.isEmpty()) {
List sorted = new ArrayList(genreData.entrySet());
sorted.sort((a, b) -> Integer.compare(b.getValue(), a.getValue())); // Sort descending
String[] labels = new String[sorted.size()];
ArrayList entries = new ArrayList();
ArrayList barColors = new ArrayList();
float maxVal = 0f;
for (int i = 0; i < sorted.size(); i++) {
Map.Entry e = sorted.get(i);
int idx = sorted.size() - 1 - i;
labels[idx] = e.getKey();
entries.add(new BarEntry(idx, e.getValue()));
barColors.add(Color.BLUE);
maxVal = Math.max(maxVal, e.getValue());
}
BarDataSet set = new BarDataSet(entries, "Genre");
set.setColors(barColors);
set.setValueTextSize(10f);
set.setValueFormatter(new ValueFormatter() {
@Override
public String getBarLabel(BarEntry barEntry) {
return String.valueOf((int) barEntry.getY());
}
});
BarData data = new BarData(set);
data.setBarWidth(0.5f);
genreChart.setData(data);
genreChart.setFitBars(true);
genreChart.getDescription().setEnabled(false);
genreChart.getLegend().setEnabled(false);
genreChart.getAxisRight().setEnabled(false);
XAxis x = genreChart.getXAxis();
x.setValueFormatter(new IndexAxisValueFormatter(labels));
x.setPosition(XAxis.XAxisPosition.BOTTOM);
x.setDrawGridLines(false);
x.setGranularity(1f);
x.setLabelCount(labels.length);
x.setTextSize(12f);
genreChart.getAxisLeft().setAxisMinimum(0f);
genreChart.getAxisLeft().setAxisMaximum(maxVal + 5f);
genreChart.setVisibleXRangeMaximum(3f);
genreChart.setDragEnabled(true);
genreChart.setPinchZoom(false);
genreChart.setScaleXEnabled(false);
genreChart.setScaleYEnabled(false);
genreChart.moveViewToX(0);
genreChart.animateY(800);
genreChart.invalidate();
}
< /code>
und mein XML -Layout: < /p>
< /code>
Probleme, mit denen ich ausgesetzt bin: < /p>
LISTE -ItemDie Diagramm zeigt zunächst die Stangen von unten an, aber ich möchte, dass es von oben beginnt (mit den längsten Balken zuerst sichtbar). Scrollen Sie zurück. Zu einer Zahl, die kleiner als die Anzahl der Datenpunkte ist, treten die erwähnten seltsamen 2 Probleme auf. Beim Einstellen, z. an genitterart.setvisiblexrangemaximum (5f);