by Anonymous » 18 Aug 2025, 10:19
Ich verwende mpandroidchart, um ein horizontales Balkendiagramm im Porträtmodus mit aktivierter Scrolling anzuzeigen. Hier ist mein aktueller Code -Snippet: < /p>
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);
Die Probleme treten nicht auf. Trotzdem ist dies ein Problem, da ich nicht alle Datenpunkte anzeigen kann und einen scrollbaren Barchart haben möchte. Weiß jemand, wie man das macht? Also bitte, wenn jemand eine Ahnung hat, wie er dieses
Problem lösen kann, werde ich Ihre Antwort sehr schätzen.
Ich verwende mpandroidchart, um ein horizontales Balkendiagramm im Porträtmodus mit aktivierter Scrolling anzuzeigen. Hier ist mein aktueller Code -Snippet: < /p>
[code]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); [/code] Die Probleme treten nicht auf. Trotzdem ist dies ein Problem, da ich nicht alle Datenpunkte anzeigen kann und einen scrollbaren Barchart haben möchte. Weiß jemand, wie man das macht? Also bitte, wenn jemand eine Ahnung hat, wie er dieses [url=viewtopic.php?t=26065]Problem[/url] lösen kann, werde ich Ihre Antwort sehr schätzen.