Facebook RSS Feed
 

.NET Micro Framework: WPF Uygulamalarında Gesture Kullanımı

Dokunmatik ekran uygulamalarında kullanıcı deneyimini yükseltmek için tercih edeceğimiz yöntemlerden biri de Gesture kullanımıdır. Gesture kullanarak ekran üzerindeki temasın hareket yönünü uygulamamıza rapor edebiliriz. Micro Framework ile tek yada çok noktalı gesture işlemleri, pan - zoom - rotate komutları ve tap - double tap gibi fonksiyonlar uygulamalarımıza entegre edilebilir.

Çalışma Mantığı

Gesture işlemi yapılırken ekrana ilk temas koordinatları ve temasın kesildiği koordinatlar belirlenir ve bu koordinatlar arasındaki açı hesaplanır. Hesaplanan açının değerine (ve temas noktalarının sayısına) göre oluşan gesture türü belirlenir. İşin en güzel yanı, tüm bu hesaplamaların Micro Framework tarafından yapılıyor olması... Örnek uygulamamızda simulatör yada fiziksel cihaz üzerinde yapılan gesture olaylarını algılayıp debug mesajı olarak almayı göreceğiz.

Uygulama Kodları

Visual Studio üzerinden yeni bir .NET Micro Framework Window Application oluşturalım. Proje referansları arasına "Microsoft.SPOT.Touch.dll" 'i ekleyelim.

Önce uygulamamızda dokunmatik fonksiyonunu başlatıp ardından gesture işleminde tetiklenecek eventi oluşturacağız. Bu event içerisinde, gesture'un oluştuğu koordinat ve gesture türünü sorgulayacağız. Uygulama kodlarımıza göz atalım:

Program.cs

using System;
using Microsoft.SPOT;
using Microsoft.SPOT.Input;
using Microsoft.SPOT.Presentation;
using Microsoft.SPOT.Presentation.Controls;
using Microsoft.SPOT.Presentation.Media;
using Microsoft.SPOT.Touch;
 
namespace MF_WPF_Gesture
{
    public class Program : Microsoft.SPOT.Application
    {
        public static void Main()
        {
            Program myApplication = new Program();
            Window mainWindow = myApplication.CreateWindow();
 
            // Touch verisinin toplanma metodunu belirleyelim (Native sürücü yada Managed):
            TouchCollectorConfiguration.CollectionMethod = CollectionMethod.Native;
 
            // Touch verisinin toplanma modunu belirleyelim
            // (InkOnly, GestureOnly yada InkAndGesture):
            TouchCollectorConfiguration.CollectionMode = CollectionMode.GestureOnly;
 
            // Touch özelliğini başlatalım:
            Touch.Initialize(myApplication);
 
            // Ana pencerede oluşacak gesture işleminde tetiklenecek eventi belirleyelim:
            mainWindow.TouchGestureChanged +=
                new TouchGestureEventHandler(mainWindow_TouchGestureChanged);
 
            myApplication.Run(mainWindow);
        }
 
        // Gesture işleminde tetiklenecek event:
        static void mainWindow_TouchGestureChanged(object sender, TouchGestureEventArgs e)
        {
            // Başlangıç koordinatları:
            Debug.Print("Gesture baslangic koordinati: " + e.X.ToString() + "," + e.Y.ToString());
 
            // Gesture türü:
            switch (e.Gesture)
            {
                case TouchGesture.Begin:        Debug.Print("Begin");           break;
                case TouchGesture.DoubleTap:    Debug.Print("DoubleTap");       break;
                case TouchGesture.Down:         Debug.Print("Down");            break;
                case TouchGesture.DownLeft:     Debug.Print("DownLeft");        break;
                case TouchGesture.DownRight:    Debug.Print("DownRight");       break;
                case TouchGesture.End:          Debug.Print("End");             break;
                case TouchGesture.Left:         Debug.Print("Left");            break;
                case TouchGesture.NoGesture:    Debug.Print("NoGesture");       break;
                case TouchGesture.Pan:          Debug.Print("Pan");             break;
                case TouchGesture.Right:        Debug.Print("Right");           break;
                case TouchGesture.Rollover:     Debug.Print("Rollover");        break;
                case TouchGesture.Rotate:       Debug.Print("Rotate");          break;
                case TouchGesture.Tap:          Debug.Print("Tap");             break;
                case TouchGesture.TwoFingerTap: Debug.Print("TwoFingerTap");    break;
                case TouchGesture.Up:           Debug.Print("Up");              break;
                case TouchGesture.UpLeft:       Debug.Print("UpLeft");          break;
                case TouchGesture.UpRight:      Debug.Print("UpRight");         break;
                case TouchGesture.UserDefined:  Debug.Print("UserDefined");     break;
                case TouchGesture.Zoom:         Debug.Print("Zoom");            break;
                defaultbreak;
            }
        }
 
        private Window mainWindow;
 
        public Window CreateWindow()
        {
            // Ekran çözünürlüğünde bir Window objesi oluşturalım:
            mainWindow = new Window();
            mainWindow.Height = SystemMetrics.ScreenHeight;
            mainWindow.Width = SystemMetrics.ScreenWidth;
 
            // Ekran nesnelerini tutacak bir panel oluşturalım:
            Panel panel1 = new Panel();
 
            // Small yazı tipiyle uygulama başlığını yazdıralım:
            Text yazi1 = new Text(Resources.GetFont(Resources.FontResources.small),
                "MF Gesture Uygulamasi");
 
            // Yazdığımız yazıyı panelin alt elemanı olarak ekleyelim:
            panel1.Children.Add(yazi1);
 
            // Paneli Main Window'un alt elemanı olarak ekleyelim:
            mainWindow.Child = panel1;
 
            // Pencereyi görünür yapalım:
            mainWindow.Visibility = Visibility.Visible;
 
            return mainWindow;
        }
    }
}

Uygulamayı çalıştırıp ekran üzerinde sürükleme işlemi yaptığınızda önce temas noktasının başlangıç koordinatlarını, sonra da sürüklenme yönünü (yada türünü) debug mesajı olarak göreceksiniz.

Visual Studio Output Window

Gesture baslangic koordinati: 38,115
Right
Gesture baslangic koordinati: 213,205
UpLeft
Gesture baslangic koordinati: 71,166
Right
Gesture baslangic koordinati: 92,131
Zoom

Rotate, pan ve zoom komutları için simulatör üzerinde CTRL+R, CTRL+P ve CTRL+Z tuşlarına basarak ve fare ile ekran üzerinde gezinerek bu fonksiyonları oluşturabilirsiniz.

Uygulamanın kaynak kodlarını buradan indirebilirsiniz.




 
Hoşgeldiniz!
Son güncelleme: 25.12.2016
-
Yeni Teknik Yazılar
Latte Panda İncelemesi
Turta IoT HAT İncelemesi
USB Gamepad Kullanımı
GPIO Kullanımı
VEML6075 UV Sensör Kullan...
-
İlgili Gruplar
.NET MF ve Gadgeteer FB Grubu
İst. IoT & Wearables Meet-up
-
 

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.Copyright © 1999 - 2017, Umut Erkal. Bu materyal, "Creative Commons Public Licence" ile sunulmuştur.
Kaynak göstererek ve ücretsiz olarak, aynı şartlar altında paylaşabilir ve kullanabilirsiniz. | Kullanım Sözleşmesi