zoukankan      html  css  js  c++  java
  • Windows phone Touch(学习笔记)

    Windows phone 支持至少四个触点, 这些手指相互作用形成multi-touch

    Silverlight程序中 touch输入通过事件获得,在XNA程序中,通过在Update方法中的一个静态类 轮询 获得  XNA更新方法的一个主要目的是判断touch输入状态,并且通过Draw方法在屏幕做出相应反应

    Multi-touch 输入设备在XNA 被叫做 touch panel

    XNA中可以使用 TouchPanel 静态类获得touch输入。

    可以通过Toupanel.GetCapabilities 方法获得multi-touch设备的信息,该方法返回一个TouchPanelCapabilities对象,这个对象有两个属性 IsConnectedmaximumTouchCount(触点数量,至少四个)

     通过TouchPanelGetState方法获得 TouchCollection,TouchCollection是一个或多个TouchLocation对象的集合,TouchLocation有三个属性

    state:   是一个枚举值 Pressed,Moved,Released.

    Postion: 是一个Vector2,表示触点在屏幕上相对于左上角的一个坐标

    Id:      是一个整数 ,标志一个指定的手指触点

    Touch过程:

    如果没有手指接触屏幕,TouchCollection将会是empty,当手指第一次touch屏幕,TouchCollection将会包含一个State属性等于PressedTouchLocation对象,随后调用TouchPanel.GetState的时候,TouchLocationState属性值将会变成 Moved,即是手指没有发生物理的移动,当手指从屏幕上松开的时候,TouchLocationState属性将会编程Released,随后调用TouchPanel.GetState的时候 TouchCollection将会变成空。

    上面是一个手指touch屏幕的过程,一般情况下会有多个手指touch,这时候可以通过TouchLocationId属性来获取指定手指的状态变化

    异常:如果 手指 按下和释放 的时间间隔小于1/30秒,TouchLocation的状态可能只有Pressed Released ,没有Moved状态

    TouchLocation 有一个TryGetPreviousLocation的方法,当 touchLocation的状态变成下一个状态时,可以获得上一个状态的位置信息,然后计算 他们的不同

    TouchLocation PreviousTouchLocation;

    Bool success=touchLocation.TryGetPreviousLocation(out previousTouchLocation);

    如果 当前状态是 Pressed 上面的函数将会返回false  TouchLocation.State 将会等于 TouchLocation.Invalid

     

    Gesture

    GestureType枚举了一些手势类型,他们通过位标记来定义,所以可以通过C#进行位操作

    这些Gesture通过TouchPanel.ReadGesturel 来获得 返回值类型是GestureSample

    使用该方法的话,程序会在手指离开时做出相应的相应,因为程序要判断用户到底要做什么操作

    SilverLight程序中

     Low-level touch: Touch 是由 Touch.FrameReported 事件来处理   

    High-level touch: 接口是由由三个UIElement类下的事件组成:ManipulationStarted,ManipulationDelta ManipulationCompleted

    Silverlightlow-level touch接口的Touch核心是 TouchPoint  他的实例表示一个特殊的 finger touching the screen 他有四个只读属性

    Action 类型是TouchAction

    Position  类型是point 相对于左上角的坐标,这个元素就是参照元素

    Size 表示touch区域(力度等)

    TouchDevice  包括两个只读属性 Id 用来区分不通的手指动作  DirectlyOver  表示手指下面最上端的元素

    在应用程序中的所有的touch事件, TouchFrameEventArgs对象有一个时间戳 TimeStamp属性,和三个方法,

    GetTouchPoints                                                     返回一个TouchPointCollection

    GetPrimaryTouchPoint                                          返回一个TouchPoint如果传进去一个参照元素 返回值将会是相对于该元素,若传进来的是null  将会是相对于应用程序的左上角;

    SuspendMousePromotionUntilTuchUp              该方法仅仅可以在是第一次touch屏幕的并且只有一个手指touch时候才可以调用

    推荐的touch targets 的大小应该大于9毫米 对于显示是264DPI的手机  9毫米是94px

    e.Complete 方法  这不是必须的方法,但是是一个有效的方法告诉系统不必要再进一步执行有关于这个手指的Manipulation事件

    e.Handled=true; 表示该事件已经被处理,不要再执行下面的函数

  • 相关阅读:
    洛谷 P1119 灾后重建
    [NOIP 2011] 观光公交
    AtCoder Beginner Contest 071 D
    UOJ #228. 基础数据结构练习题
    bzoj 3673&3674: 可持久化并查集 by zky
    bzoj 2427: [HAOI2010]软件安装
    都市环游
    poj2299——Ultra-QuickSort
    poj1958——Strange Towers of Hanoi
    洛谷 P4139 上帝与集合的正确用法
  • 原文地址:https://www.cnblogs.com/yinghuochong/p/2163788.html
Copyright © 2011-2022 走看看