手指之舞(二):GestureListener。手勢監聽操作

來源:互聯網
上載者:User

尋找能簡單處理觸摸事件的方法,silverlight低級觸控螢幕事件,由於不太方便,暫時不用,進階事件Manipulation。由於沒有發現多點觸摸處理的方法也果斷棄之。接著就發現了Toolkit的GestureListener。用了下,挺方便的。

GestureListener有下面的事件:


如,事件基本和名字所述,這裡和Manipulation的方法差不多的是GestureBegin,GestureCompleted。DragDelta.DragStarted.DragCompleted.那隨便用這個GestureListener小試一把吧。

大家如果玩過WP7的實況就知道。那個控制方向的東東,一個小圓盤。我打算用這個GestureListener來實現下那個。

要添加需要的DLL和命名空間。但是我懶,因為還得到C盤去尋找toolkit的DLL。索性拖控制項一把。這樣,神馬DLL,命名空間都給我添加好了。人懶了沒辦法。

在XAML下添加如下代碼:

<Ellipse x:Name="outside" Width="200" Height="200" HorizontalAlignment="Left"                     VerticalAlignment="Top" Margin="50,50,0,0" Fill="Orange" >            </Ellipse>            <Ellipse x:Name="rectangle" Width="100" Height="100" HorizontalAlignment="Left"                       VerticalAlignment="Top" Margin="100,100,0,0"                            Fill="Blue" Stroke="Red" StrokeThickness="5">                <toolkit:GestureService.GestureListener>                    <toolkit:GestureListener                                              DragDelta="GestureListener_DragDelta"                                             DragCompleted="GestureListener_DragCompleted"                                             />                </toolkit:GestureService.GestureListener>                <Ellipse.RenderTransform>                    <TranslateTransform x:Name="translation"/>                </Ellipse.RenderTransform>            </Ellipse>  

在設計器上顯示如下:


現在思路是:主要處理觸摸操作在裡面的圓。使之可以在外圓裡面動,那麼要做的只是在Delta下控制內圓的位置和DragCompleted下把內圓放回原處。感覺不錯的是DragDeltaGestureEventArgs提供了平行和豎直方向的座標改變值。這樣做起來就相當方便了。

那麼代碼如下:

      private void GestureListener_DragDelta(object sender, DragDeltaGestureEventArgs e)        {            double x = this.translation.X + e.HorizontalChange;            double y = this.translation.Y + e.VerticalChange;            if (x <= -50)                this.translation.X = -50;            else if (x >= 50)                this.translation.X = 50;            else                this.translation.X = x;            if (y <= -50)                this.translation.Y = -50;            else if (y >= 50)                this.translation.Y = 50;            else                this.translation.Y = y;        }        private void GestureListener_DragCompleted(object sender, DragCompletedGestureEventArgs e)        {            this.translation.X = 0;            this.translation.Y = 0;        }  

這樣,就可以實現內圓在外圓上運動了。如果想要知道究竟現在手指控制的方向是上下左右什麼的。自己判斷translation的座標就知道了。這個TranslateTransform提供的是左上方的座標並且相對自己為(0,0)。很好處理吧。


不過,可惜的是,這個GestureListener也是用的是主要觸摸點,如果是非主要觸摸點它又不工作了。。。。可惜了。不過做些手勢操作識別還是很不錯的選擇。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.