MPAndroidChart – #26

Powoli w aplikacji zaczynają się pojawiać wykresy. Na razie jeden – z liczbą wystąpień danego obiadu. Do wyrysowania używam biblioteki MPAndroidChart. To był pierwszy wybór, ale jeszcze nie wiem, czy przy nim zostanę.

Jak na razie ten kod nie jest jakiś imponujący. Uczę się poruszać po tej bibliotece i więcej czasu spędzam w Google i dokumentacji niż piszę kod 😉 To jest pierwsze podejście do tego żeby było coś widać:


private void createDinnerBarChart() {
dbHelper = new CoNaObiadDbHelper(this);
DinnerContract dinnerContract = new DinnerContract();
LinkedHashMap<String, Long> mealData = dinnerContract.getDinnerStatistics(dbHelper);
List<BarEntry> entries = new ArrayList<>();
int i = 0;
for (Map.Entry<String, Long> entry : mealData.entrySet()) {
String mealName = entry.getKey();
Long quantity = entry.getValue();
entries.add(new BarEntry(i, quantity, mealName));
i++;
}
final BarDataSet set = new BarDataSet(entries, "");
BarData data = new BarData(set);
data.setBarWidth(0.2f);
HorizontalBarChart chart = (HorizontalBarChart) findViewById(R.id.chart);
chart.getLegend().setEnabled(false);
chart.getDescription().setEnabled(false);
XAxis xAxis = chart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setGranularity(1f);
xAxis.setLabelCount(i);
xAxis.setDrawGridLines(false);
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
return (String) set.getEntryForXValue(value, 0.1f).getData();
}
});
YAxis yAxis = chart.getAxisLeft();
yAxis.setGranularity(0.5f);
chart.getAxisRight().setDrawLabels(false);
chart.getAxisRight().setDrawGridLines(false);
chart.setData(data);
chart.setVisibleXRange(0,i);
}

Metoda ‚getDinnerStatistics’ jak na razie jest mocno na wyrost nazwana – to po prostu zwykły count na dwóch tabelkach:


private String getCountDinnersQuery() {
String mealName = MealContract.columnName;
return "select " + mealName + ", count(" + mealName + ") as quantity from " + tableName
+ " join " + MealContract.tableName
+ " on " + tableName + "." + columnMealId + " = " + MealContract.tableName + "." + _ID
+ " group by " + mealName
+ " order by 2";
}

W przyszłości planuję jeszcze dodać zawężanie dat.

A jak prezentuje się wykres? Zupełnie niespójnie do całej aplikacji 😀

wp-1499849362903.

W planach mam zmianę wyglądu wykresu tak żeby też wyglądał jakby był ręcznie rysowany, ale to są plany. Wiem, że jest to do zrobienia 🙂

Skomentuj

Proszę zalogować się jedną z tych metod aby dodawać swoje komentarze:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj /  Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj /  Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj /  Zmień )

Połączenie z %s

Ta witryna wykorzystuje usługę Akismet aby zredukować ilość spamu. Dowiedz się w jaki sposób dane w twoich komentarzach są przetwarzane.