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";
}

view raw
DinnerContract.java
hosted with ❤ by GitHub

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 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

%d bloggers like this: