Creare grafici su Android con MPAndroidChart

Creare grafici su Android con MPAndroidChart

Ho scoperto che in questi ultimi tempi, sono tante parecchie librerie per la creazione di grafici per Android.

Oggi ne vediamo una che mi è piaciuta parecchio: MPAndroidChart.

Andremo a costruire un PieChart, lo metteremo dentro ad un Fragment, e i dati li prenderemo da un file JSON (giusto per fare qualcosa di diverso dagli esempi classici che potete trovare anche qua).

Prima di tutto scaricate la libreria e aggiungetela al progetto (questa operazione varia a seconda dell'IDE che usate).

A questo punto vediamo il Fragment:

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.utils.ColorTemplate;
import java.io.IOException;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class FragmentChart extends Fragment {

    private ArrayList labels = new ArrayList();
    private ArrayList colors = new ArrayList();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout_fragment_chart, container, false);
        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        for (int c : ColorTemplate.VORDIPLOM_COLORS) {
            colors.add(c);
        }
        for (int c : ColorTemplate.JOYFUL_COLORS) {
            colors.add(c);
        }
        for (int c : ColorTemplate.COLORFUL_COLORS) {
            colors.add(c);
        }
        for (int c : ColorTemplate.LIBERTY_COLORS) {
            colors.add(c);
        }
        for (int c : ColorTemplate.PASTEL_COLORS) {
            colors.add(c);
        }
        setEntriesData();
    }

    private void setEntriesData() {
        try {
            ArrayList entries = new ArrayList();
            entries.clear();
            JSONArray jsonArray = new JSONArray("...."); // LEGGERE FILE JSON
            for (int i = 0; i < 10; i++) {
                JSONObject jo = jsonArray.getJSONObject(i);
                entries.add(new Entry(Float.parseFloat(jo.getString("valore")), i));
                labels.add(jo.getString("causale"));
            }
            PieDataSet dataset = new PieDataSet(entries, "");
            PieChart chart = (PieChart) getView().findViewById(R.id.chart);
            dataset.setColors(colors);
            PieData data = new PieData(labels, dataset);
            chart.setData(data);
        } catch (IOException ex) {
        } catch (JSONException ex) {
        }
    }
}

Non ho specificato la lettura del file JSON.

Abbiamo usato tutti quei cicli sui colori per fare in modo che ogni "fetta" abbia un suo colore, e rendere il grafico più leggibile; i colori vengono assegnati random.

Infine il layout:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:app="http://schemas.android.com/apk/res-auto"
             android:orientation="vertical"
             android:layout_width="match_parent"
             android:layout_height="match_parent">
    
    <com.github.mikephil.charting.charts.PieChart
        android:id="@+id/chart"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</FrameLayout>

Abbiamo indicato un solo componente di tipo com.github.mikephil.charting.charts.PieChart, e lo abbiamo richiamato nel codice tramie l'id.

Questa libreria ha molte potenzialità e vari tipi di grafici.

Vi consiglio di approfondire!

Enjoy!