Android, Diagramme mit AFreeChart erstellen

Wer sich mit Java schon etwas beschäftigt hat sollte das Framework JFreeChart kennen. Für Android wurde dieses durchaus sehr gute Framework portiert und kann aus dem Repository von Google „https://code.google.com/p/afreechart/“ heruntergeladen werden.

Für mein Projekt habe ich die Version 0.0.4 gewählte welche unter der Adresse AFreeChart Downloads bezogen werden kann (dort befindet sich unter anderem die JavaDoc und eine *.apk Datei als Lauffähige Android App).

Einbinden der Sourcen

Zuerst muss die Datei afreechart-0.0.4.jar in das Projekt eingebunden werden. Dieses ist in jeder IDE unterschiedlich. Da ich InteliJ von JetBrains verwende und mein Projekt mit Gradle erstelle muss ich einen Ordner „libs“ neben dem „src“ Ordner erstellen.

"libs" Ordner für externe Bibliotheken
„libs“ Ordner für externe Bibliotheken

Nun noch die Datei in diesem Ordner ablegen und im Android Projekt bekannt machen.

Als nächstes muss dieser Ordner in der Konfigurationsdatei „build.gradle(Module: app)“  eingetragen werden.

Konfigurationsdatei für die Abhängigkeiten im Android Projekt.
Konfigurationsdatei für die Abhängigkeiten im Android Projekt.

Es wird lediglich folgender Eintrag hinzugefügt bzw ergänzt.

 

Erstellen einer Activity mit einem Liniendiagramm

Um eine Activity mit zbsp. einem Liniendiagramm zu erstellen muss man ähnlich wie bei JFreeChart das Diagramm Objekt  „AFreeChart“ erstellen.

Diagramm einer View hinzufügen

Dieses Diagramm kann nun zu einer View hinzugefügt werden. Ich wende aus dem Beispiel die DemoView und leite davon meine neue View ab somit muss ich mich nicht mit dem Überschreiben von Methoden kümmern.

Als erstes müssen wir unseren Konstruktur erstellen welcher als Parameter den Context und eine java.util.List (oder eine andere Collection) mit den Werten enthält. In meinem Fall sind dies Messergebnisse.

Diese Messergebnisse müssen nun einem Dataset zugeordnet werden.

In diesem Beispiel habe ich die Zeitachse in Minuten Abstände eingestellt. Andere Werte können zbsp. sein:

RegularTimePeriod
RegularTimePeriod

Der Konstruktor der Klasse „Minute“ erwartet ein java.util.Date Objekt daher muss ich erst mein Timestamp (long) in ein Date Objekt umwandeln. Am einfachsten geht dieses mit der Klasse java.util.Calendar.

Als Zeitzone setzte ich hier die deutsche Zeitzone, eleganter ist es jedoch die Zeitzone vom Gerät zu verwenden.
Wenn Sie die Zeitzone vom Gerät verwenden möchten kann die Zeile

entfallen, da die Klasse java.util.Calendar schon die Zeitzone vom Gerät hat.

Das Diagramm auf einer Activity darstellen

Nachdem wir das Diagramm erstellt und mit Daten befüllt haben, werden wir nun dieses auf einer Activity darstellen.

Das Layout zur Activity

Das Layout für diese Activity wird einfach ausfallen da wir unser View Objekt selbst erstellen benötigen wir zuerst nur einen Container für dieses.

Das „LinearLayout“ wird unser Container.

Einbetten des Diagramms in den Container

Zuerst erstellen wir unser DiagrammView Objekt und holen eine Referenz zum Linearlayout (unser Container). In dieses Layout wird nun unser DiagrammView Objekt mit der Methode „addView(View view)“ hinzugefügt.

Damit das Diagramm die volle Breite des Bildschirms einnimmt nutze ich eine Hilfsklasse welche mir die Bildschirmgröße als android.graphics.Point liefert (ähnlich wie java.awt.Point).

Speichern des Diagramms als Bitmap

Wer sich schonmal mit JFreeChart beschäftig hat wird nun eine UtilKlasse vermissen

Hier kann mit einem einfachen Trick abhilfe geschaffen werden. Es ist in Android möglich von jedem View Objekt einen „Screenshot“ zu erstellen und somit erstellen wir von unserem Container welches unser Diagramm enthält, einen Screenshot und Speichern dieses als Bitmap auf dem Gerät.

Da wir das Bitmap auf dem Gerät ablegen wollen benötigen wir zusätzliche Rechte (Permissions) welche in der Android.Manifest.xml festgehalten werden.

Teilen des Diagramms

Dieses erstellte Bild kann nun mit anderen Geräte oder Systemen geteilt / verschickt werden. Das Objekt „chartFile“ ist vom Typ java.io.File und enthält unseren Screenshot vom Container.

Das fertige Diagramm

Folgendes Diagramm habe ich mit dem oben dargestellten Code generiert.
Die Werte sind nur Beispielhaft.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.