windows phone 8.1开发:触控和指针事件1

原文出自:http://www.bcmeng.com/windows-phone-touch/

UIElement类的触控事件:

ManipulationStarting:当用户将手指放在 IsManipulationEnabled 属性设置为true的元素上时,将在该元素上发生 ManipulationStarting 事件。即在触控操作开始之前引发。

ManipulationStarted:在触控操作开始之后引发。

ManipulationInertiaStarting:当触控操作终止并开始惯性运动时引发该事件。

ManipulationDelta:当用户在操作过程中将手指拖过屏幕并且在惯性发生时又重复操作时,该事件会多次发生。只要触控操作中任何参数的变化都会引发该事件,比如位置,角度等。

(注意ManipulationDelta里面有俩个十分重要的属性:Delta和Cumulative。Delta属性是指当前发生ManipulationDelta事件时的所有数据,Cumulative是指从触控操作开始一来发生的所有数据的更改。ManipulationDelta事件的Complete()方法可以终止惯性运动)

ManipulationCompleted:触控操作完成时引发该事件

(注:e.OriginalSource可以获取引发触控的对象,e.Handled可以终止路由事件继续向上传递,  e.Position可以获取当前位置坐标)

关于触控事件引发的顺序:(注:ManipulationDelta 事件会被引发多次)

  • ManipulationStarting
  • ManipulationStarted
  • ManipulationDelta
  • ManipulationInertiaStarting
  • ManipulationDelta
  • ManipulationCompleted

我们可以通过一个Rectangle做一个测试来验证触控事件的引发顺序:(注:必须要设置ManipulationMode属性,否则不会引发触控事件)

<Rectangle Name=”rect” Width=”200″
Height=”300″ Fill=”Yellow”
ManipulationMode=”All”
ManipulationCompleted=”rect_ManipulationCompleted”
ManipulationDelta=”rect_ManipulationDelta”

ManipulationInertiaStarting=”rect_ManipulationInertiaStarting”

ManipulationStarted=”rect_ManipulationStarted”
ManipulationStarting=”rect_ManipulationStarting”
PointerCanceled=”rect_PointerCanceled”
PointerEntered=”rect_PointerEntered”
PointerExited=”rect_PointerExited”
PointerMoved=”rect_PointerMoved”
PointerPressed=”rect_PointerPressed”
PointerReleased=”rect_PointerReleased”
RightTapped=”rect_RightTapped”
Tapped=”rect_Tapped”
>
</Rectangle>

后台代码:

private void rect_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e)
{
Debug.WriteLine(“{0}-ManipulationCompleted事件发生”, DateTime.Now.ToString(“H:m:s”));
}
private void rect_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
Debug.WriteLine(“{0}-ManipulationDelta事件发生”, DateTime.Now.ToString(“H:m:s”));
}

private void rect_ManipulationInertiaStarting(object sender, ManipulationInertiaStartingRoutedEventArgs e)
{
Debug.WriteLine(“{0}-ManipulationInertiaStarting事件发生”, DateTime.Now.ToString(“H:m:s”));
}

private void rect_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
{
Debug.WriteLine(“{0}-ManipulationStarted事件发生”, DateTime.Now.ToString(“H:m:s”));
}

private void rect_ManipulationStarting(object sender, ManipulationStartingRoutedEventArgs e)
{
Debug.WriteLine(“{0}-ManipulationStarting事件发生”, DateTime.Now.ToString(“H:m:s”));
}

private void rect_PointerCanceled(object sender, PointerRoutedEventArgs e)
{
Debug.WriteLine(“{0}-PointerCanceled事件发生”, DateTime.Now.ToString(“H:m:s”));
}

private void rect_PointerEntered(object sender, PointerRoutedEventArgs e)
{
Debug.WriteLine(“{0}-PointerEntered事件发生”, DateTime.Now.ToString(“H:m:s”));
}

private void rect_PointerExited(object sender, PointerRoutedEventArgs e)
{
Debug.WriteLine(“{0}-PointerExited事件发生”, DateTime.Now.ToString(“H:m:s”));
}

private void rect_PointerMoved(object sender, PointerRoutedEventArgs e)
{
Debug.WriteLine(“{0}-PointerMoved事件发生”, DateTime.Now.ToString(“H:m:s”));
}

private void rect_PointerPressed(object sender, PointerRoutedEventArgs e)
{
Debug.WriteLine(“{0}-PointerPressed事件发生”, DateTime.Now.ToString(“H:m:s”));
}

private void rect_PointerReleased(object sender, PointerRoutedEventArgs e)
{
Debug.WriteLine(“{0}-PointerReleased事件发生”, DateTime.Now.ToString(“H:m:s”));
}

private void rect_RightTapped(object sender, RightTappedRoutedEventArgs e)
{
Debug.WriteLine(“{0}-RightTapped事件发生”, DateTime.Now.ToString(“H:m:s”));
//rect.Fill = new SolidColorBrush(Colors.Blue);
}

private void rect_Tapped(object sender, TappedRoutedEventArgs e)
{
Debug.WriteLine(“{0}-Tapped事件发生”, DateTime.Now.ToString(“H:m:s”));
//rect.Fill = new SolidColorBrush(Colors.Red);
}

当我们滑动矩形时,会发现输出如下:

12:19:13-PointerEntered事件发生
12:19:13-PointerPressed事件发生
12:19:13-ManipulationStarting事件发生
12:19:13-PointerExited事件发生
12:19:13-ManipulationStarted事件发生
12:19:13-ManipulationDelta事件发生
12:19:13-ManipulationDelta事件发生
12:19:13-ManipulationDelta事件发生
12:19:13-ManipulationCompleted事件发生
12:19:13-PointerReleased事件发生

下面我们继续通过这个矩形来演示一个实例,通过触控拖动和旋转矩形:

首先设置一个复合变换 CompositeTransform:

CompositeTransform cpTransform = null;

再在mainpage的初始化方法中设置矩形的ManipulationMode 属性。

rect.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY | ManipulationModes.Rotate;

然后对矩形应用变换:

cpTransform = new CompositeTransform();
cpTransform.TranslateX = cpTransform.TranslateY = 0;
cpTransform.Rotation = 0;
//cpTransform.ScaleX = cpTransform.ScaleY = 1;
cpTransform.CenterX = rect.Width / 2;
cpTransform.CenterY = rect.Height / 2;
rect.RenderTransform = cpTransform;

最后在ManipulationDelta事件中处理触控事件:

cpTransform.TranslateX += e.Delta.Translation.X;
cpTransform.TranslateY += e.Delta.Translation.Y;
cpTransform.Rotation += e.Delta.Rotation;

运行效果如下:

下面我们再来演示一个利用触控缩放照片的实例:

<Image Width=”200″ Height=”200″ Name=”image”
Source=”1.jpg” Stretch=”Fill”
ManipulationDelta=”image_ManipulationDelta”
ManipulationMode=”Scale”/>

后台代码:

ScaleTransform scaleTransform;
public Image()
{
this.InitializeComponent();
scaleTransform = new ScaleTransform();
scaleTransform.CenterX = image.Width / 2;
scaleTransform.CenterY = image.Height / 2;
scaleTransform.ScaleX = scaleTransform.ScaleY = 1;
image.RenderTransform = scaleTransform;
}
private void image_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
scaleTransform.ScaleX*= e.Delta.Scale;
scaleTransform.ScaleY*= e.Delta.Scale;
}

运行效果如下:

指针事件我们放到下一篇吧。

时间: 2024-08-29 09:46:35

windows phone 8.1开发:触控和指针事件1的相关文章

Windows Phone 8.1开发:触控和指针事件2

原文出自:http://www.bcmeng.com/windows-phone-touch1/ 请在此输入内容(想死啊,写了一个小时,直接没保存不小心删掉了.那就简单说说吧)Pointer事件有以下事件: PointerCanceled PointerEntered PointerExited PointerMoved PointerPressed PointerReleased PointerCaptureLost 其引发顺序如下: 当点击时:即Tap事件引发的触摸和指针事件顺序如下: 12

Windows phone 8 学习笔记(1) 触控输入(转)

Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此在输入方式上引入一套全新的触控操作方式,我们需要重新定义相关的事件和方法.触控覆盖了Windows phone 8绝大部分用户的输入,如何处理输入呢,微软从SL和XNA两个方面提供了多种选择,并支持多点触控,下面我们看看具体的实现方式. 一.触控输入的处理方式 Silverlight 1)操作事件    用于触控操作是一个过程性的,因此通过三个事件Manipul

bbframework入门之路【五】触控绑定

[正文] 前面我们介绍了如何在bbframework项目中创建我们自己的模块,也在场景里面添加了精灵节点,但是讲到编程就少不了要说到事件.因为我们是做手机游戏,而现在的手机又普遍都是大屏的智能触控手机,所以我们游戏涉及最多的当属触控操作了.今天我们便来简单介绍下bbframework的触控,帮助我们实现游戏的交互操作. 接着上一次的内容,我们在Layer层上面放置了两个节点,代码如下: ---------------------- -- 结点渲染 ---------------------- -

【unity3D】单点和多点触控

[狗刨学习网] 总结: Input.touchCount获取当前的触摸点数目,若为1则是单点触控,大于1则是多点触控 点击事件用:Input.GetTouch(num).phase == TouchPhase.Began这样的格式 代码: using UnityEngine; using System.Collections; public class click2 : MonoBehaviour { //设置点击时显示的图片 public Texture2D img; void Start (

在pc端和触控端支持滚动条

js在移动设备广泛实现的基本触摸事件: touchstart :手指放在一个DOM元素上. touchmove :手指拖曳一个DOM元素. touchend :手指从一个DOM元素上移开. 触控端JS事件是ontouchstart.ontouchend.ontouchmove: 和PC上JS事件onmousedown.onmouseup.onmousemove是对应的 例子: <!DOCTYPE html> <html> <head> <meta charset=

WPF触控程序开发(三)——类似IPhone相册的反弹效果

用过IPhone的都知道,IPhone相册里,当图片放大到一定程度后,手指一放,会自动缩回,移动图片超出边框后手指一放,图片也会自动缩回,整个过程非常和谐.自然.精确,那么WPF能否做到呢,答案是肯定的. 在没有现成的控件的情况下,只有自己做,你肯定想到做动画,WPF触屏开发提供了相应的功能来获取触控点的一些变化,这些变化的最佳消费者个人认为是Matrix.我们回想下做动画一般怎么做,比如给一个button做个宽度增5的动画,我们一般是定义一个DoubleAnimation,然后定义一个Sotr

Windows Store App JavaScript 开发:WinJS库控件

在介绍了如何使用标准的HTML控件以及WinJS库中提供的新控件之后,下面来着重介绍WinJS库中几种常用的控件. (1)ListView控件 在开发Windows应用商店应用时可以使用ListView控件以网格或列表的方式显示多条数据.ListView控件的常用属性有: q  groupDataSource属性,用来设置分组的数据源. q  groupHeaderTemplate属性,用来为分组的头部设置模板. q  itemDataSource属性,用来为组中的数据项设置数据源. q  it

HTML5移动开发之路(52)——jquerymobile中的触控交互

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(52)--jquerymobile中的触控交互 当使用移动设备进行触控操作时,最常用的就是轻击.按住屏幕或者手势操作,jQuery Mobile可以通过绑定的触控事件来响应使用者的特定触控行为. 一.轻击与按住 直接上代码(一切皆在代码中,细细品吧!) [html] view plain copy print? <!DOCTYPE html> <html> <head> <t

windows触控手势

触控板手势 简而言之,在这篇文章里,触控手势1到4可以在任何一种触控板上使用,而手势5到8则需要精确触控板. 1.拖拽 要模拟鼠标的拖拽功能,只需要将一个手指在某个项目上轻轻的双击一下,然后就可以拖拽它了.当拖拽到需要的位置时抬起指尖,就可以把这个项目放置到所在的地方. 2.滚屏 要模拟鼠标的滚屏功能,只需要将两个手指在你想要滚屏的地方按下并向屏幕滚动的方向拖动即可.这个功能对任何支持滚屏的应用程序都有效,包括文字处理.网络浏览器以及音乐播放器等,而且支持横向和纵向滚屏. 3.缩放 要模拟在大多