2008-12-15 10 views
17

Vor dem Hintergrund der Verbreitung von Multi-Touch-Schnittstellen gibt es Bibliotheken in Java, die für die Entwicklung von Touch-Anwendungen genutzt werden können? Ich suche nach Schnittstellen ähnlich MouseListener/MouseMotionListener/MouseWheelListener.Wie entwickelt man Multi-Touch-Anwendungen in Java?

Antwort

9

Das MT4j Projekt alles, was Sie brauchen ist Multi-Touch-Anwendungen in Java zu entwickeln. Alle bekannten Multitouch-Gesten sind bereits eingebaut und können als einfaches als Mausereignisse abgerufen werden (zum Beispiel: component.addGestureListener (..)). Es verfügt auch über einen hardwarebeschleunigten Szenengraph, ähnlich wie JavaFX. Sie können sogar Multitouch-Eingaben simulieren, indem Sie eine oder mehrere Mäuse an Ihr Gerät anschließen. Schau es dir an http://www.mt4j.org

+0

Erlaubt MT4j dem Entwickler, neue Multitouch-Gesten neben den eingebauten zu erstellen? Nicht sofort aus der Liste der MT4j Features auf der Webseite ersichtlich. –

+0

Ja, MT4j erlaubt sicherlich neue Multitouch-Gesten, da dies eine sehr wichtige Voraussetzung für Multitouch-Anwendungen ist. Alles, was Sie tun müssen, ist einen neuen sogenannten Eingabe-Prozessor zu erstellen und ihn mit einer Komponente zu registrieren. Tutorials, die zeigen, wie das geht, werden bald folgen. Bis dahin können Sie sich den Quelltext der vorhandenen Gesten anschauen. –

+0

MT4j sieht gut aus - leider ist es GPL und daher nicht für kommerzielle Anwendungen geeignet. – hendrik

5

Sparsh ist immer noch in meinen Lesezeichen von der letzten Zeit, die ich Multitouch-Java-Lösungen untersuchte.

Obwohl nicht so einfach wie der typische Maus-Listener oder Klick-Listener, bietet es dennoch eine sinnvolle Schnittstelle.

Sie müssen Ihre Hörklasse implementieren sparshui.client.Client, die die processEvent Methodendefinition erfordert.

public void processEvent(int groupID, Event event) { 

     if(event instanceof TouchEvent) { 
      TouchEvent e = (TouchEvent)event; 
      if(e.getState() == TouchState.BIRTH) { 
       //do initial touch stuff 
      } else if(e.getState() == TouchState.MOVE) { 
       //do dragging stuff 
      } 
     } 
     else if(event instanceof DragEvent) { 
      DragEvent e = (DragEvent)event; 
      //do DragEvent specific stuff 
     } else if(event instanceof RotateEvent) { 
      RotateEvent e = (RotateEvent)event; 
      //do RotateEvent specific stuff 
     } else if(event instanceof ZoomEvent) { 
      ZoomEvent e = (ZoomEvent)event; 
      //do ZoomEvent specific stuff 
     } 
     //several other gesture types.... 
} 

Danach müssen Sie die Gestenerkennung Server starten, in der Komponente auf der Website

new ServerConnection("localhost", objectImplementingClientInterface); 

Mit Blick auf den Codebeispielen vorbei sollten Sie eine ziemlich gute Vorstellung davon Rahmen geben.

+3

Autsch ... wirklich, müssen Sie die Ereignisse "instanceOf"? Sie bieten keine Rückrufe wie, processDragEvent, processZoomEvent usw.? –

+0

Soweit ich weiß, unterstützen sie nur einen generischen "processEvent" -Aufruf, weil Sie möglicherweise benutzerdefinierte Gesten hinzufügen möchten, die im Framework nicht nativ sind. Dies bietet diese Erweiterbarkeit, ohne den Rahmencode ändern zu müssen. –

0

Ich arbeite hauptsächlich in Bearbeitung und Gestaltung meiner UI von Grund auf. Ich habe nach einer Lösung gesucht, die kein UI-Framework vorschreibt, das sowohl MT4J als auch JavaFX zu tun scheinen. Darüber hinaus scheint MT4J aufgegeben zu sein.

Dies sieht aus wie eine vielversprechende Lösung zumindest für Windows, aber ich bin nicht sicher, ob es noch tatsächlich freigegeben ist: http://wiki.gestureworks.com/index.php/GestureWorksCore:Gestureworks_Core_Tutorials

Dies ist speziell für die Verarbeitung, plattformübergreifende Open-Source und aktiv: https://github.com/vialab/SMT

0

MT4J funktioniert nicht mit Windows 8

Wenn die applicatin nur für einen Benutzer ist, können Sie JavaFX verwenden. Es gibt verschiedene Listener für Berührungsereignisse. Es ist jedoch nicht möglich, zwei Gesten gleichzeitig zu verarbeiten, da alle Berührungspunkte zu einer Geste verschmelzen. Für große Multi-Touch-Bildschirme ist es ein Nachteil. Für normale Bildschirme ist nur ein Benutzer in Ordnung.

Aber es gibt auch GestureWorks. Dort können Sie eine neue Geste definieren oder die vordefinierte Geste verwenden. Die Gesten sind in einer XML-Datei (GML) definiert. Jedes Objekt kann mit eigenen Gesten umgehen. Aber Sie müssen den hitTest und die Punktvergabe manuell implementieren. Aber es gibt eine greate tutorial. Eine andere Bibliothek, die ich nicht getestet habe, ist die Multi Touch SDK by PQ Lab.