[toc]Dieser Artikel stellt den Auftakt einer Serie weiterer Berichte zu “ersten Schritten” mit aktuell verfügbaren Multitouch-Entwicklungsumgebungen dar. Innerhalb dieser Serie liefert der vorliegene Bericht einen Überblick über die Entwicklung von Multitouch-Anwendungen mit Multitouch for Java (MT4j). Das Framework bietet umfangreiche Funktionalität für das Arbeiten mit Multitouch-Hardware und einfach adaptierbare Konzepte zur Entwicklung eigener Anwendungen. Im Folgenden wird nach einer kurzen Einführung die Einrichtung mit Eclipse erläutert, einige Beispielanwendungen vorgestellt sowie ein Minimal-Beispiel implementiert.
Einführung
- Java-Framework zur Entwicklung von Multitouch-Anwendungen
- Verwendung verschiedener Komponenten (Bilder, Videos, 3D-Objekte)
- Anbindung unterschiedlicher Hardware und Protokolle
- 10 vorhandene Multitouch-Gesten sowie Möglichkeit zur Erstellung von eigenen Gesten
- Performante Darstellung durch OpenGL
Demo
Um vor der Vorstellung der technischen Details einen ersten Eindruck zu schaffen, demonstriert das folgende Beispielvideo die Funktionalität der mitgelieferten Kartenapplikation:
Historie
Das MT4j-Framework wird vom Fraunhofer-Institut für Arbeitswirtschaft und Organisation (IAO) entwickelt und basiert (wie der Name schon sagt) auf der weit verbreiteten objektorientierten Programmiersprache Java. Im Herbst 2009 wurde das Framework unter Open Source-Lizenz veröffentlicht und wird seitdem durch die OpenSource-Gemeinde weiterentwickelt. Die Multitouch-Plattform übernimmt alle benötigten Aufgaben, wie beispielsweise die Erkennung von Multitouch-Gesten, deren Umsetzung in Events sowie die erforderliche Grafikausgabe. Es bietet eine umfangreiche Bibliothek mit vorgefertigten Grafiken, Gesten und Schriften und ist sehr generisch implementiert, sodass eigene Gesten und Grafiken problemlos hinzugefügt werden können. Das Framework ist prinzipiell kompatibel zu allen Multitouch Geräten, da es die Inputs der Hardware abstrahiert. Als Grundlage hierfür wird die Anbindung an verschiedene APIs (z.B. TUIO) bereitgestellt, welche die Eingaben des Touchscreens interpretieren. Die Darstellung erfolgt über die Grafikschnittstelle OpenGL, sodass die Anwendungen auf entsprechender Hardware sehr performant sind.
Komponenten und Aufbau
Die nachfolgende Tabelle gibt einen Überblick über die technischen Eigenschaften sowie bereitgestellten Gesten und Komponenten des Frameworks:
Eigenschaft | Ausprägung bei MT4j |
---|---|
Programmiersprache |
|
Rendering |
|
Hardware-Anbindung |
|
Multitouch-Gesten |
|
Bereitgestellte Komponenten |
|
Installation
Das MT4j Framework steht als quelloffener Download, derzeit in Version 0.95 zur Verfügung und ist bereits als ein Eclipse-Projekt strukturiert.
MT4j läuft derzeit nur mit der 32bit-Variante von Java. Soll ein 64bit System eingesetzt werden, muss trotzdem der 32bit JDK installiert werden. Unter Eclipse muss entsprechend die 32bit Variante von Java zum Ausführen der MT4j Anwendungen ausgewählt werden!
- Java Development Kit 32bit (gekennzeichnet als x86) herunterladen und installieren
- Die heruntergeladene ZIP-Datei entpacken (MT4j 0.95 full release)
- Im Paketexplorer von Eclipse mit Rechtsklick importieren wählen
- In dem Importfenster ein “bereits existierendes Projekt” auswählen
- Den unter 2. entpackten Ordner auswählen und importieren
[nggtags gallery=MT4j+Installation]
Mitgelieferte Beispiele
Das MT4j-Paket enthält 19 einfache Beispielanwendungen. Diese sind unterteilt in die Pakete “basic” und “advanced” und sind im Ordner “examples” zu finden. Die Basic Examples dienen zum Verstehen und Testen der grundlegenden Techniken in sehr einfach gehaltenen Applikationen. Die Advanced Examples demonstrieren die Leistungsfähigkeit des Frameworks, indem beispielsweise 3D Modelle verwendet werden. Jede Anwendung befindet sich in einem eigenen Paket. Es ist keine weitere Konfiguration erforderlich, da das Framework alle benötigte Komponenten automatisch sucht und auswählt. Zum Starten ist jeweils eine “Start…Example.java” Datei hinterlegt, die als “Java Application” in Eclipse ausgeführt werden kann. Nach dem Start öffnet sich ein neues Fenster innerhalb dessen die Multitouch-Interaktion möglich ist.
Basic-Anwendungen
[nggtags gallery=MT4j+Beispielanwendung+basic]
Advanced-Anwendungen
[nggtags gallery=MT4j+Beispielanwendung+advanced]
Minimalimplementierung
Eine Multitouch-Anwendung mit MT4j zu schreiben ist denkbar einfach, da sie nur zwei Klassen (Scene und MTApplication) benötigt. Die folgenden beiden Abschnitte geben einen Überblick über die Implementierung eine einfachen Applikation zur Bildmanipulation. Die Anwendung, die zum Selbsttest ebenfalls als Download verfügbar ist, ermöglicht es, ein Bild anzuzeigen und dieses mit Standard-Multitouch-Gesten zu manipulieren.
Scene
Eine “Scene als erste benötigte Bestandteil der Anwendung muss die abstrakte Klasse “AbstractScene” erweitern. In dieser Klasse wird festgelegt, welche Komponenten angezeigt werden. Es gibt viele vorgefertigte Elemente, die insbesondere Standard-Multitouch-Gesten bereits beherrschen. Hierzu gehören beispielsweise Grafiken, Textfelder und Rahmen für verschiedene andere Objekte. Für unser Minimalbeispiel benötigen wir folgenden Code für die Scene-Klasse:
package MinimalExample; import org.mt4j.MTApplication; import org.mt4j.components.TransformSpace; import org.mt4j.components.visibleComponents.widgets.MTImage; import org.mt4j.input.gestureAction.InertiaDragAction; import org.mt4j.input.inputProcessors.componentProcessors.dragProcessor.DragProcessor; import org.mt4j.sceneManagement.AbstractScene; import org.mt4j.util.math.Vector3D; import processing.core.PImage; public class PictureScene extends AbstractScene { private String picturePath = "MinimalExample" + MTApplication.separator + "data" + MTApplication.separator; public PictureScene (MTApplication mtApplication, String name) { super(mtApplication, name); MTApplication app = mtApplication; PImage img = app.loadImage(picturePath + "pic.jpg"); MTImage image = new MTImage(img,app); image.setUseDirectGL(true); image.setPositionGlobal(new Vector3D(400,400,0)); image.scale(0.2f, 0.2f, 0.2f, image.getCenterPointLocal(), TransformSpace.LOCAL); image.addGestureListener(DragProcessor.class, new InertiaDragAction()); this.getCanvas().addChild(image); } @Override public void init() {} @Override public void shutDown() {} }
Datei ist zu beachten, dass sich das entsprechende Bild im Paket “MinimalExample.data” (gekennzeichnet als “picturePath”) befinden muss, damit es geladen werden kann!
MTApplication
Die “Application”-Klasse dient zum Starten der Anwendung und muss die abstrakte Klasse “MTApplication” erweitern. Die vorher beschriebene Scene wird lediglich hinzugefügt. Anschließend wird die Anwendung mit dem Methodenaufruf “initialize()” gestartet. Dazu sind lediglich die Folgenden Codezeilen erforderlich:
package MinimalExample; import org.mt4j.MTApplication; public class StartMinimalExample extends MTApplication { private static final long serialVersionUID = 1L; public static void main(String args[]) { initialize(); } @Override public void startUp() { this.addScene(new PictureScene(this, "Picture scene")); } }