2008-12-15 10 views
17

Antycypacja dnia, w którym interfejsy multi-touch stają się bardziej wszechobecne, czy istnieją biblioteki w Javie, które można wykorzystać do tworzenia aplikacji dotykowych? Szukam interfejsów podobnych do MouseListener/MouseMotionListener/MouseWheelListener.Jak opracować aplikacje multi-touch w Javie?

Odpowiedz

9

projektu MT4j ma wszystko, czego potrzeba, aby rozwijać multitouch aplikacji w Javie. Wszystkie dobrze znane gesty multitouch są już wbudowane i mogą być dostępne jako proste jako nasłuchiwanie zdarzeń myszy (na przykład: component.addGestureListener (..)). Posiada również graficzny wykres przyspieszenia sprzętowego, podobny do JavaFX. Można nawet symulować wprowadzanie wielodotykowe przez podłączenie do myszy więcej myszy. Sprawdź to na http://www.mt4j.org

+0

Czy MT4j pozwala deweloperowi tworzyć nowe gesty multitouch, oprócz wbudowanych? Nie od razu widać z listy funkcji MT4j na stronie. –

+0

Tak, MT4j z pewnością pozwala tworzyć nowe gesty multitouch, ponieważ jest to bardzo ważne wymaganie dla aplikacji wielodotykowych. Wszystko, co musisz zrobić, to stworzyć nowy tak zwany procesor wejściowy i zarejestrować go w komponencie. Samouczki pokazujące, jak to zrobić, będą wkrótce dostępne. Do tego czasu możesz spojrzeć na kod źródłowy istniejących gestów. –

+0

MT4j wygląda świetnie - niestety jest to GPL i dlatego nie nadaje się do komercyjnych aplikacji. – hendrik

5

Sparsh jest wciąż w moich zakładkach od czasu ostatniego badania rozwiązań wielodotykowych java.

Chociaż nie jest tak prosty jak typowy słuchacz myszy lub słuchacz kliknięć, nadal zapewnia rozsądny interfejs.

Potrzebujesz swojej klasy nasłuchu do implementacji sparshui.client.Client, która wymaga definicji metody processEvent.

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.... 
} 

Po tym, trzeba uruchomić serwer rozpoznawanie gestów, przechodząc w składniku

new ServerConnection("localhost", objectImplementingClientInterface); 

Patrząc na przykłady kodu na stronie powinno dać całkiem dobry pomysł ram.

+3

Ouch ... naprawdę, musisz "instancjiOf" wydarzeń? Nie zapewniają one wywołań zwrotnych, takich jak processDragEvent, processZoomEvent itp.? –

+0

O ile mi wiadomo, obsługują tylko ogólne wywołanie "processEvent", ponieważ możesz chcieć dodać niestandardowe gesty, które nie są natywne dla architektury. Zapewnia to rozszerzalność bez konieczności modyfikacji kodu struktury. –

0

Pracuję przede wszystkim nad przetwarzaniem i projektowaniem mojego interfejsu użytkownika od podstaw. Szukałem rozwiązania, które nie zalecałoby ram interfejsu użytkownika, które wydają się robić zarówno MT4J, jak i JavaFX. Ponadto wydaje się, że MT4J jest porzucony.

To wygląda obiecująco rozwiązanie przynajmniej dla Windows, ale jestem pewien, czy to faktycznie wydany jeszcze: http://wiki.gestureworks.com/index.php/GestureWorksCore:Gestureworks_Core_Tutorials

Jest specjalnie do przetwarzania, cross-platform, open-source i aktywny: https://github.com/vialab/SMT

0

MT4J nie działa z Windows 8.

Jeśli applicatin jest tylko dla jednego użytkownika, można użyć JavaFX. Istnieją różne słuchacze dla zdarzeń dotykowych. Ale nie jest możliwe przetwarzanie dwóch gestów w tym samym czasie, ponieważ wszystkie punkty dotykowe scalą się w jeden gest. W przypadku ekranów wielodotykowych jest to niekorzystne. W przypadku normalnych ekranów, gdzie jest tylko jeden użytkownik, jest w porządku.

Ale istnieje również GestureWorks. Tam możesz zdefiniować nowy gest lub użyć predefiniowanego gestu. Gesty są zdefiniowane w pliku XML (zwanym GML). Każdy obiekt może obsłużyć tam własne gesty. Ale musisz ręcznie zaimplementować hitTest i przypisanie punktu. Ale jest greate tutorial.

Kolejna biblioteka, której nie testowałem, to Multi Touch SDK by PQ Lab.