Multi-Touch
17.06.2011, 12:09 Uhr
entwickeln für Windows 8
PCs mit Touch-Display sind heute noch eher eine Ausnahme. Mit Windows 8 sollen sie auch bei Microsoft zum Alltag werden. Darauf können sich Entwickler schon jetzt vorbereiten.
Desktops mit berührungsempfindlichem Bildschirm liefern heute nur vereinzelt Hersteller wie Acer, Lenovo oder Samsung. Auch sind Anwendungen rar, die für Multi-Touch-Eingabe, bei der etwa Objekte über eine Bewegung von Daumen und Zeigefinger vergrössert oder verkleinert werden können, ausgelegt. Mit Windows 8 wird sich das ändern. Was bei der Gestaltung von Benutzeroberflächen zu berücksichtigen ist, wenn sie auch per Multi-Touch bedienbar sein sollen, macht ein MSDN-Artikel deutlich.
Touch-Events und Manipulationen
Mit Windows Presentation Foundation 4 (WPF) kommt eine Unterstützung für Touch-Displays in Windows 7 dazu. Multi-Touch-Aktivitäten werden bei WPF in zwei Kategorien unterteilt: Events und Manipulationen. Zur ersten Kategorie zählen die vier Events TouchDown, TouchLeave, TouchMove und TouchUp. Sie werden von den elementaren WPF-Klassen UIElement, UIElement3D und ContentElement gleichermassen unterstützt. Mit ihrer Hilfe werden elementare Operationen wie die Auswahl oder das Verschieben eines Objekts realisiert. Microsoft-Spezialist Lester Lobo stellt in einem Beispielprojekt dar, wie das Verschieben eines Quaders mithilfe der Touch-Events TouchDown und TouchMove mit dem Finger erlaubt. Deutlich weiter gehen die Touch-Manipulationen, die ebenfalls auf Events basieren. Im Mittelpunkt stehen die Events ManipulationStarting, ManipulationDelta und ManipulationInertiaStarting der UIElement-Klasse, von der sich die Window-Klasse indirekt ableitet. Anders als bei den einfachen Touch-Events sind hier Delta- und Behavior-Werte im Spiel mit denen das Ausmass einer Bewegung in Relation zur letzten Bewegung ausgedrückt wird. Mit Hilfe dieser Events ist zum Biespiel das Vergrössern oder Verkleinern eines Bildschirmobjekts über die allen Besitzern eines iPhones bekannte Zwei-Finger-Geste möglich. Frei definierbare Gesten (Englisch: gestures) sind bei WPF 4.0 dagegen nicht realisierbar. Das bedeutet nicht, dass sie nicht im Rahmen einer WPF-Anwendung zur Verfügung stehen können. Allerdings muss der Gesture-Handler mit Hilfe der Windows 7 MultiTouch .NET Interop-Library implementiert und als Assembly eingebunden werden. Nächste Seite: Hallo Welt für Multi-Touch Eine kleine Übung soll zeigen, dass die Integration von Multi-Touch in eine WPF-Anwendung mit wenig Aufwand realisierbar ist. Das Beispiel basiert auf einer Anleitung in der MSDN-Library. In einem Window werden drei Rectangle-Objekte angezeigt, die per Fingereingabe verschoben und per Zwei-Finger-Geste rotiert, vergrössert und verkleinert werden können.
Schritt 1: WPF-Anwendung erstellen
Die WPF-Anwendung besteht aus einem Window-Element mit einem Canvas als Container.
Schritt 2: Window-Events definieren
Im Window-Element werden drei Events deklariert: ManipulationStarting="Window_ManipulationStarting" ManipulationDelta="Window_ManipulationDelta" ManipulationInertiaStarting="Window_InertiaStarting"
Schritt 3: Matrizentransformation definieren
In den Ressourcen des Fensters wird eine einfache Matrizentransformation definiert.
Schritt 4: Rectangle-Objekts definieren
Die per Multi-Touch-Eingabe zu verschiebenden Objekte sind reguläre Rectangle-Objekte, in denen eine Bitmap als Brush angezeigt wird. Ihr Bewegungsablauf wird über die RenderTransform-Property festlegt, die auf die in den Window-Ressourcen enthaltene Matrizentransformation verweist. Entscheidend für den Umstand, dass das Objekt auf Multi-Touch-Eingaben reagiert, ist die IsManipulationEnabled-Property, die den Wert true erhält.
Schritt 5: ManipulationStarting-Event
Im ManipulationStarting-Event wird lediglich das Fenster als ManipulationContainer vereinbart: e.ManipulationContainer = this;
Schritt 6: ManipulationDelta-Event
Im ManipulationDelta-Event wird die Hauptarbeit bei der Umsetzung einer MultiTouch-Aktion verrichtet. Hier wird Schritt für Schritt der aus Rotation, Grössenänderung und Verschieben bestehende Operation als Matrizentransformation zusammengesetzt und am Ende auf das Objekt angewendet.
Schritt 7: ManipulationInertiaStarting-Event
Das ManipulationInertiaStarting-Event tritt ein, wenn der Finger das Objekt losgelassen hat und die durch die Multi-Touch-Aktion initiierte Bewegung ausläuft. Über die Property DesiredDeceleration der Objekte TranslationBehavior, ExpansionBehavior und RotationBehavior, die über den e-Parameter zur Verfügung gestellt werden, wird das Auslaufen dieser Bewegungen über eine einfache Formel festgelegt. Das Ergebnis ist eine kleine WPF-Anwendung, bei der Rechtecke per Multi-Touch-Gesten verschoben, rotiert, verkleinert und vergrössert werden können. Das ist nicht sonderlich spektakulär, aber das Beispiel gibt einen Vorgeschmack auf das, was mit Windows 8 auf Entwickler zukommt. Das Beispiel verdeutlicht, mit wie wenig Aufwand sich eine WPF-App für Multi-Touch-Eingaben anpassen lässt. Der Quelltext des Beispielprojektssteht als ZIP zur Verfügung.
Peter Monadjemi