多点触摸概述与手势实现

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:wuhaoxin1987
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:多点触摸随着iphone的推出风靡全球,是当今最炙手可热的人机交互方式。该文对多点触摸的原理和编程模型进行简要的介绍,并给出了一些触摸手势的C#编程实现。
  关键词:多点触摸;手势;C#
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)06-1387-03
   1概述
  多点触摸作为一种全新的人机交互方式随着iphone的推出风靡全球。它允许人们直接使用双手作为输入设备控制我们的手机或者电脑,我们可以使用双指或者多根手指进行复杂的操作,大家都爱上了这种生动、多样、灵活、自然的交互体验。Google的Android、微软的Windows 7、Window Phone 7以及即将推出的Windows 8都加入了对多点触摸的支持,多点触摸成为现在最炙手可热的人机交互技术。
   2多点触摸原理
  目前我们的电脑或者手机都是通过感应电容触摸屏(以下简称电容屏)实现多点触摸的。电容屏的玻璃表面贴有一层透明的特殊金属导电物质,当手指触碰时触点的电容会发生变化,从而可以获知触点的位置。电容屏又分为两类,自电容感应和互电容感应。
  1)自电容感应
  自电容感应的感应单元是分立的行和列,他们分别检测行和列上面的电容变化。如果只有一个触摸点的时候,行列上面都只有一个电容最大值,因此可以准确获得触摸的位置。但是当有两个触摸点的时候,行列上面会有两个电容最大值,这个时候就会产生“鬼点”现象,无法准确获得触摸点的位置,如图1所示。不过由于可以判断出两个手指的运动方向,所以依然可以进行缩放、平移、旋转等多点手势操作。
  
  图1
  2)互电容感应
  互电容感应是目前主流的电容屏技术。由于它对每行每列交叉点都进行单独扫描检测,所以它可以识别到触摸的具体位置,没有自电容感应的“鬼点”现象。而且它可以检测到双手10个手指的同时触摸,也支持其他非手指触摸方式,如手掌、脸、拳头等,甚至戴手套也可以,是最人性化的人机接口方式,非常适合多手同时进行操作的应用。
  当前大部分的触摸设备都是采用互电容感应的方式。设备通过触摸屏采集原始触摸数据,并将数据按各系统规定的协议进行封装上传至系统,由系统进行后续的解析、手势识别等计算。
   3多点触摸编程模型
  目前主流支持多点触摸的操作系统所采用的多点触摸编程模型基本一致。模型将一个或多个和屏幕接触的手指识别为多点触摸序列的一部分。序列从第一个手指接触屏幕开始,以最后一个手指离开屏幕为结束。模型通过多点触摸序列跟踪与屏幕接触的手指,记录手指在屏幕上的位置和接触时间。模型会发送两种类型的事件供应用程序调用。一种是直接將手指的触摸信息包括位置、时间戳、关联视图等作为事件提供给应用程序,应用程序自己提供处理逻辑对触摸信息进行处理;一种是模型将特定组合的触摸识别为手势提供给应用程序,应用程序会根据手势以用户直观的方式进行响应。
   4手势实现
  多点触摸最大的优势就是用户可以通过手势进行复杂的操作。比如收缩双指距离的手势,程序的响应就是缩小显示的内容;对轻拂屏幕的手势,则响应为滚动显示的内容。本文将介绍一些基本手势的c#程序实现,包括双指旋转、双指放缩、双指平移等以供读者举一反三,实现更加复杂的手势。
  定义触摸信息类,代码如下。public class TouchData
  { public bool IsTouch=true;//是否触摸public int X;//触摸横坐标public int Y;//触摸纵坐标
  }
  public class MultiTouchData
  { //一次触摸包括多个手指的触摸信息,系统默认编号1,2,3,······
  public Dictionary touchDict;
  public int distX;//双指横坐标差
  public int distY;//双指纵坐标差,这两个用来判断旋转
  public int avgX;//双指横坐标平均值
  public int avgY;//双指纵坐标平均值,这两个用来判断双指平移
  public double length;//双指距离,用来判断放缩
  public MultiTouchData()
  { touchDict = new Dictionary(); for (int i = 1; i < 4; i ){
  //本系统最多支持4点触摸
  TouchData tData = new TouchData();
  touchDict.Add(i, tData);}}}
  下面给出判断双指旋转的代码。
  private bool IsDoubleTouchRotate(MultiTouchData newData)
  {//计算两个向量成角
  double rotate = Math.Acos((newData.distX * lastData.distX newData.distY * lastData.distY) / (newData.length * lastData. length));
  if (Math.Abs(rotate) >= 0.13){//两个向量角度大于15°则认为发生旋转double angle = Math.Atan((double)lastData.distY / lastData.distX); OnDoubleTouchRotate(angle, rotate); //发送旋转事件IsRotate = true;//旋转变量置真lastData = newData;//更新起始点
  return true;} else return false;}
  下面是判断双指放缩的代码。
  private bool IsDoubleTouchZoom(MultiTouchData newData){ if (Math.Abs(newData.length - lastData.length) >= 3){
  //两次触摸双指距离差大于3,说明发生放缩操作//计算放缩比例
  double zoom = (double)newData.length / lastData.length; OnZoom(zoom);//发送放缩事件IsZoom = true;//放缩变量置为真lastData = newData;//更新起始点
  return true;}
  else
  return false;}
  最后是判断双指平移的代码。
  private bool IsDoubleTouchMove(MultiTouchData newData)
  {
  //计算双指触摸中心点坐标差
  int xdist = newData.avgX - lastData.avgX; int ydist = newData.avgY - lastData.avgY;
  if ((Math.Abs(xdist) >= 3) || (Math.Abs(ydist) >= 3)){
  坐标差大于3说明发生平移操作
  OnDoubleTouchMove(xdist, ydist);//发送双指平移事件IsMove = true;//置平移信号为真lastData = newData;//更新起始点位置
  return true;}
  else
  return false;}
   5结束语
  该文大致介绍了多点触摸的原理和编程模型,并给出了一些手势的编程实现。随着iphone的持续畅销,其他厂家的积极跟进,多点触摸将继续全球的狂热。广大计算机知识的爱好者可以自己动手实现一些多点触摸的手势操作,相信会有一定的市场效应。
  参考文献:
  [1]肖学军,郑赞.最新多点触摸屏技术介绍[Z].
  [2] Iphone应用程序编程指南[B].
  [3] Windows Touch编程指南[B].
其他文献
根据对Apache中的测试工具ApacheBench的分析,采用了CMMI3中的软件开发方法,利用多线程模拟多个用户实现了多用户并发测试,并利用管道技术对多个线程进行操作,实现数据共享。
目的 观察β-榄香烯对人肝癌细胞株Hep G2增殖的影响,并探讨其作用机制。方法 取对数生长期Hep G2细胞分为A、B、C、D组,分别置于含10%胎牛血清RPMI 1640培养基、5μg/m Lβ-
<正> 素英同志: 信收,材料尚未到。王统照先生是我最最尊敬的前辈和朋友,你研究他的著作,我很高兴!“文学史”上把王先生压得太低了,不公允。“子夜”与“山雨”双峰并峙。王
目前大部分国内高校的出口链路已经有多种选择,出口带宽也逐年提高,而针对校外访问校园网内部各种资源的研究与应用实践不多,该文对基于F5的多链路接入负载均衡技术在校园网
目的观察单倍体造血干细胞移植治疗阵发性睡眠性血红蛋白尿症(PNH)的疗效。方法 1例男性43岁PNH患者,行单倍体造血干细胞移植。预处理方案为非清髓的氟达拉滨/环磷酰胺+抗人T细
摘要:1999年6月13日颁布的《中共中央国务院关于深化教育改革全面推进素质教育的决定》指出高等学校的目标,就是要培养学生的全面素质而不是单纯传授某种具体的技能,创新精神和实践能力则是最重要的两种素质;三亚学院人才培养规格中三个交往工具(英语、计算机、中文写作)符合国家的人才培养目标,让学生真正掌握三个交往工具,是实现我国人才培养目标的方法。  关键词:人才培养目标;三个交往工具;《Visual
<正>人类社会生产方式的矛盾运动,是社会发展的决定力量。这是马克思主义历史唯物论的一条重要原理。这个原理是十分正确的。马克思的科学社会主义学说,在着重阐明阶级社会中
目的探讨产前单疗程地塞米松干预对早产儿体格和认知发育的影响。方法选取早产儿98例,按产前是否使用单疗程地塞米松干预分为两组,对照组50例,未用地塞米松;观察组48例,产前
摘要:面向过程方法的弊端引发了20世纪60年代的“软件危机”,面向对象方法的出现为软件开发开辟了新的出路。从分析“软件危机”的起因着手,阐述了面向过程方法的弊端,介绍了面向对象方法的特点,并总结了面向对象方法优越性和局限性。  关键词:软件开发;面向过程;面向对象  中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)09-2136-03  The Revolution f
<正> 研究中国古代的教育资料,是否具有现实意义? 在故纸堆中,我们能寻找什么呢?这是值得深思的问题。随着现代科学技术的迅猛发展,对人才的培养提出了新的要求,教育理论在现