触摸屏中的手势识别
- 格式:doc
- 大小:63.50 KB
- 文档页数:6
人体工程学提高人机交互体验的技术人体工程学是研究人类与机器、设备等人机交互界面之间的相互作用关系的学科。
在当前数字化时代,人们与智能设备的互动已经成为生活的一部分。
为了提高人机交互的体验,人体工程学的应用变得尤为重要。
本文将探讨几种运用人体工程学原则来提高人机交互体验的技术。
一、触摸屏技术触摸屏技术是一种常见的人机交互界面。
通过触摸屏,用户可以直接用手指来操作设备,而不再需要使用鼠标或键盘等外部设备。
通过人体工程学的研究,触摸屏的设计变得更加符合人体的自然姿势和操作习惯。
在触摸屏上,按键的大小、间距和位置都会受到人体工程学的考量,以确保用户在使用时的舒适度和便利性。
二、语音识别技术语音识别技术是一种利用声音输入来实现人机交互的技术。
当用户使用语音交互时,他们可以通过自然语言与设备进行对话。
人体工程学的应用可以帮助提高语音识别技术的准确性和用户友好性。
通过研究人类语言和口腔运动的特点,语音识别技术可以更好地适应人类的发音和语调,从而提供更好的交互体验。
三、手势识别技术手势识别技术是一种利用手势动作来实现人机交互的技术。
通过识别用户的手势动作,设备可以理解用户的意图并采取相应的操作。
人体工程学的研究可以帮助设计更加自然和符合人类习惯的手势操作。
例如,在使用手势滑动屏幕的功能时,设备会根据人体工程学的原则来确定滑动的速度和力度,以提供更好的用户体验。
四、虚拟现实技术虚拟现实技术是一种通过模拟真实场景和富有交互性的全息图像来实现人机交互的技术。
通过人体工程学的研究,虚拟现实技术可以提供更加真实且符合人体感知的交互体验。
例如,设备可以根据人体工程学的原理来调整虚拟现实场景的逼真感和分辨率,以使用户更容易适应虚拟环境并更好地操作设备。
总结:人体工程学的应用可以有效提高人机交互体验的技术。
从触摸屏技术到语音识别技术,再到手势识别技术和虚拟现实技术,各种技术都在追求更符合人体习惯和需求的用户体验。
未来,随着人体工程学的不断发展,人机交互体验将继续得到提升,为人们的日常生活和工作带来更多便利和舒适。
威纶通触摸屏系统参数的设定1.分辨率:分辨率是指屏幕上的像素数量,通常以水平像素数×垂直像素数来表示。
设备的分辨率要根据应用需求进行设定,高分辨率可以显示更多的细节,但可能影响设备的性能和电池寿命。
2.灵敏度:灵敏度决定了触摸屏对触摸输入的反应速度。
根据应用场景的需要,可以对触摸屏的灵敏度进行调整。
灵敏度太高可能会导致误触,而灵敏度太低则可能需要用户用更多的力气进行触摸。
3.接触判定:触摸屏可以通过判断触摸点的大小、形状和位置来确定用户的操作意图。
设备可以设定触摸点的大小范围和形状判定的灵敏度以及触摸点的位置判定方式,以满足用户对于不同操作的要求。
4.多点触控:多点触控功能可以实现多个触摸点的同时操作,例如双指缩放和旋转。
设备可以设定多点触控的最大触摸点数量和触摸点之间的最小距离,以适应不同的操作需求。
5.反应时间:反应时间是指用户触摸屏后系统响应的时间。
较低的反应时间可以提供更好的触摸体验,但也可能对设备的性能要求更高。
可以通过增加处理器性能或优化软件来减少触摸屏的反应时间。
6.抗干扰能力:触摸屏需要具备一定的抗干扰能力,以确保在高电磁干扰环境下仍能正常工作。
可以通过使用抗干扰电路和屏蔽技术来提高触摸屏的抗干扰能力。
7.电源管理:触摸屏需要适当的电源管理来延长电池寿命,例如可以设置触摸屏的休眠时间和待机功耗。
8.校准和校正:触摸屏可以进行校准和校正来确保准确的触摸输入。
校准是指调整触摸点的准确位置,而校正是指调整触摸点的触摸区域。
设备可以设定校准和校正的频率和方法,以保证触摸屏的准确度。
9.手势识别:触摸屏可以通过识别特定的手势来实现更多的交互操作,例如滑动、双击和长按等。
设备可以设定哪些手势被识别以及触发手势的阈值和时间,以适应不同用户的操作习惯。
10.外观设计:触摸屏的外观设计不仅影响用户的视觉感受,还可以提供更好的操作体验。
设备可以根据应用场景的需要设定触摸屏的大小、形状和材料等参数。
我们经常利用触摸屏的Fling、Scroll等Gesture(手势)操作来操作会使得应用程序的用户体验大大提升,比如用Scroll手势在浏览器中滚屏,用Fling在阅读器中翻页等。
在Android系统中,手势的识别是通过 GestureDetector.OnGestureListener接口来实现的,不过翻遍了Android的官方文档也没有找到一个相关的例子,API Demo中的TouchPaint 也仅仅是提到了onTouch事件的处理,没有涉及到手势。
Android Developer讨论组里也有不少人有和我类似的问题,结合他们提到的方法和我所做的实验,我将给大家简单讲述一下Android中手势识别的实现。
我们先来明确一些概念,首先,Android的事件处理机制是基于Listener(监听器)来实现的,比如我们今天所说的触摸屏相关的事件,就是通过onTouchListener。
其次,所有View的子类都可以通过setOnTouchListener()、 setOnKeyListener()等方法来添加对某一类事件的监听器。
第三,Listener一般会以Interface(接口)的方式来提供,其中包含一个或多个abstract(抽象)方法,我们需要实现这些方法来完成onTouch()、onKey()等等的操作。
这样,当我们给某个view设置了事件Listener,并实现了其中的抽象方法以后,程序便可以在特定的事件被dispatch到该view的时候,通过callback函数给予适当的响应。
看一个简单的例子,就用最简单的TextView来说明(事实上和ADT中生成的skeleton 没有什么区别)。
Java代码public class GestureTest extends Activity implements OnTouchListener{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(yout.main);// init TextViewTextView tv = (TextView) findViewById(R.id.page);// set OnTouchListener on TextViewtv.setOnTouchListener(this);// show some texttv.setText(R.string.text);}@Overridepublic boolean onTouch(View v, MotionEvent event) {Toast.makeText(this, onTouch, Toast.LENGTH_SHORT).show();return false;}我们给TextView的实例tv设定了一个onTouchListener,因为GestureTest类实现了OnTouchListener 接口,所以简单的给一个this作为参数即可。
触摸屏解密方法一、背景介绍随着科技的发展和智能手机的普及,触摸屏已经成为我们日常生活中不可或缺的一部分。
触摸屏的出现让人们可以通过手指的触摸来完成各种操作,比如浏览网页、玩游戏、输入文字等。
然而,有时候我们可能会遇到一些问题,比如触摸屏不工作、触摸屏被锁定等,这就需要我们了解触摸屏解密方法,以便能够解决这些问题。
二、触摸屏不工作的可能原因触摸屏不工作可能是由多种原因造成的,下面列举了一些常见的原因: 1. 触摸屏可能被污染,导致触摸无效。
可以用干净的软布擦拭屏幕来解决这个问题。
2. 手指可能太干燥或者太湿润,触摸屏无法准确识别。
这时候可以适当使用手指湿润剂或者擦拭手指来解决问题。
3. 触摸屏可能出现了物理损坏,需要更换触摸屏。
4. 电池电量不足可能导致触摸屏不工作,可以尝试充电后再次使用。
三、触摸屏被锁定的解密方法有些情况下,我们可能会发现触摸屏被锁定了,无法使用。
这时候,我们需要进行解密操作,下面介绍一些解密方法: 1. 利用硬件按键解锁,大多数触摸屏设备都有一个物理的“开机”或者“解锁”按键,长按该按键可以解锁触摸屏。
2. 使用密码解锁,如果你的触摸屏设备已经设置了密码锁,那么只有通过正确输入密码才能解锁触摸屏。
3. 使用指纹解锁,如果你的触摸屏设备支持指纹解锁功能,可以尝试使用指纹来解锁触摸屏。
4. 使用面部识别解锁,一些高端触摸屏设备支持面部识别功能,只需要将你的脸对准摄像头即可解锁触摸屏。
四、触摸屏解密的技术原理触摸屏解密的技术原理主要涉及到触摸屏的工作原理和数据传输方式。
触摸屏一般分为电阻式触摸屏和电容式触摸屏两种。
4.1 电阻式触摸屏解密电阻式触摸屏是利用两层导电玻璃之间的电阻来测量位置的。
当手指触摸屏幕时,会导致两层导电玻璃之间的电阻值发生变化,通过测量这个电阻值的变化,就可以确定手指触摸的位置。
电阻式触摸屏解密一般需要通过程序来解析和处理电阻值的变化。
4.2 电容式触摸屏解密电容式触摸屏是利用手指和触摸屏之间的电容变化来测量位置的。
未来的计算机界面触摸屏和手势识别技术的发展未来的计算机界面:触摸屏和手势识别技术的发展在科技的不断进步和创新中,计算机界面也在不断地演变和发展。
触摸屏和手势识别技术作为新一代计算机界面的重要组成部分,正逐渐成为未来计算机界面的主导趋势。
本文将探讨未来计算机界面触摸屏和手势识别技术的发展潜力和应用前景。
一、触摸屏技术的发展触摸屏技术早在20世纪70年代就开始出现,并随着时间的推移发展成为我们今天熟悉的形式。
随着智能手机、平板电脑等移动设备的普及,触摸屏技术得到了广泛应用和迅速发展。
未来的触摸屏技术将进一步提升用户体验,并在更多领域展现其应用潜力。
1. 多点触控技术未来的触摸屏技术将不仅局限于单点触控,而是实现多点触控的功能。
通过多指触控,用户可以进行更加灵活和自然的操作,大大提升交互的效率和便利性。
例如,用户可以通过使用两个手指在屏幕上放大或缩小图片,或是使用三个手指切换不同的应用程序。
2. 弹性触摸屏技术弹性触摸屏技术是一种新型触摸屏技术,在未来有着广阔的发展前景。
相比传统的硬性触摸屏,弹性触摸屏允许用户进行更加细腻和精准的操作。
此外,弹性触摸屏还有着更高的可靠性和耐久性,能够适应更复杂的环境和使用场景。
3. 可折叠屏幕技术可折叠屏幕技术是触摸屏技术的又一次突破和创新。
通过采用可折叠屏幕,未来的计算机界面将具备更大的屏幕比例,同时又能够轻便易携带。
用户可以根据需要将屏幕展开或者折叠,实现从手机到平板电脑、笔记本电脑的多种形态转换。
二、手势识别技术的发展手势识别技术是指通过感应和解读人体手势动作,实现计算机交互的技术。
随着人们对自然交互方式的需求增加,手势识别技术正逐渐成为计算机界面的重要补充和发展方向。
1. 3D手势识别技术未来的手势识别技术将不再局限于二维平面,而是能够识别和理解更加复杂的三维手势动作。
通过3D手势识别技术,计算机可以获取更加精准和全面的用户手势信息,提供更自然和智能的交互方式。
新触控的用法触控技术的发展已经深刻改变了我们使用电子设备的方式。
从最初的单点触控到现在的多点触控,触控技术正不断创新和演进。
本文将介绍一些新触控的用法,让我们更好地利用这项技术。
首先,新触控技术已经实现了手势识别。
通过在屏幕上进行不同的手势操作,我们可以快速执行各种命令。
比如,在手机上向上划动两个手指可以打开最近使用的应用列表,在电脑上用手指圈画一个“O”可以缩小屏幕上的内容。
这些手势操作使我们的操作更加高效和便捷。
其次,新触控技术还可以应用在虚拟现实领域。
通过佩戴虚拟现实头盔,我们可以进入一个完全沉浸式的虚拟世界。
而触控手柄则可以让我们在虚拟世界中进行各种操作,比如拿起、放下、旋转等。
这种交互方式使得虚拟现实体验更加真实和自由。
另外,新触控技术还应用在智能家居中。
通过安装带有触控功能的开关和灯具,我们可以通过触摸屏幕来控制家中的电器设备。
比如,我们可以在床头的触摸屏上关闭所有灯光,或者通过触摸屏幕上的图标来调节房间的温度。
这种智能化的触控系统使得我们更加方便地掌控家中的各项设备。
此外,新触控技术还可以应用在医疗领域。
通过触控屏幕,医生可以方便地查看病人的病历和检查报告,进行疾病诊断和治疗计划制定。
而在手术中,医生可以通过触控手柄来进行精细的操作,比如在微创手术中使用触控手柄进行器械的控制和操作,提高手术的精确性和安全性。
最后,新触控技术还可以应用在教育领域。
通过在教室里安装触控屏幕,学生可以通过触摸屏幕来回答问题或者参与互动。
这种互动方式使得学生更加积极主动地参与课堂,提高学习效果。
而教师也可以通过触控屏幕来展示教学内容,使得教学更加生动有趣。
总之,新触控技术的应用范围越来越广泛,不仅改变了我们使用电子设备的方式,还为各个领域带来了新的创新。
我们期待着触控技术在未来的进一步发展和应用。
Android开发中的手势识别和动作识别技术随着智能手机的普及和功能的增强,手势识别和动作识别技术在Android应用开发中变得越来越重要。
这些技术为用户提供了更方便、更直观的交互方式,使得手机应用变得更加人性化。
在本文中,我们将深入探讨Android开发中的手势识别和动作识别技术,并介绍如何在应用中使用这些技术。
手势识别是指通过分析手机触摸屏上的手指运动轨迹,识别出用户划过屏幕留下的形状和方向。
Android系统提供了GestureDetector 类来支持手势识别。
开发者可以使用接口中的方法来监听和处理用户的手势动作。
首先,我们需要在应用的布局文件中引入GestureDetector:``` xml<android:id="@+id/gestureDetector"android:layout_width="match_parent"android:layout_height="match_parent" />```然后,在Activity中初始化GestureDetector:``` javaGestureDetectorCompat detector = new GestureDetectorCompat(this, new MyGestureListener());```接下来,我们需要实现自定义的GestureListener来处理手势事件:``` javaclass MyGestureListener extends {@Overridepublic boolean onSingleTapConfirmed(MotionEvent e) { // 处理单击事件return true;}@Overridepublic boolean onDoubleTap(MotionEvent e) {// 处理双击事件return true;}@Overridepublic void onLongPress(MotionEvent e) {// 处理长按事件}}```通过重写GestureListener中的方法,我们可以根据用户的手势动作来执行相应的操作。
⼿势识别(⼀)--⼿势基本概念和ChaLearnGestureChallenge以下转⾃:像点击(clicks)是GUI平台的核⼼,轻点(taps)是触摸平台的核⼼那样,⼿势(gestures)是Kinect应⽤程序的核⼼。
和图形⽤户界⾯中的数字交互不同,⼿势是现实⽣活中存在的动作。
如果没有电脑我们就不需要⿏标,但是没了Kinect,⼿势依然存在。
从另⼀⽅⾯讲,⼿势是⽇常⽣活中⼈与⼈之间相互交流的⼀部分。
⼿势能够增强演讲的说服⼒,能够⽤来强调和传递情感。
像挥⼿(waving)或者指向(pointing)这些⼿势都是某种⽆声的演讲。
Kinect应⽤程序的设计和开发者的任务就是将这些现实⽣活中存在的⼿势映射到计算机交互中去以传达⼈的想法。
尝试从⿏标或触摸式的GUI设计移植基于⼿势的⾃然交互界⾯要做很多⼯作。
借鉴过去30多年来对于这⼀概念的研究,以及从⼀些Kinect for Xbox的体感游戏中获取⼀些设计理念,计算机⼯程师和交互设计师⼀起为Kinect创建了⼀系列新的⼿势库。
本⽂将会介绍⽤户体验的⼀些知识,并讨论如何将⼿势应⽤到Kinect应⽤程序中。
我们将展⽰Kinect如何作为⾃然交互界⾯(Natural User Interface)的⼈机交互模型的⼀部分。
我们将讨论⼀些具体的使⽤Kinect来进⾏⼿势识别及交互的例⼦。
更重要的是,将会展⽰⼀些已经作为Kinect⼿势识别库中的⼿势1. 什么是⼿势在许多不同的学科中,⼿势(gesture)有着其独特的含义,可能这些含义之间有某些异同。
在艺术领域,⼿势被⽤来传达舞蹈中最富表现⼒的部分,特别是在亚洲舞蹈艺术中,⼿势被作为某些宗教符号或者象征。
在交互设计领域,在基于触摸的⾃然交互界⾯中⼿势和操控有很⼤区别。
以上这些说明⼿势在不同的学科领域都有⾃⼰独特的含义。
在学术领域都试图对⼿势定义⼀个抽象的概念。
在⽤户体验设计领域使⽤最⼴泛的关于⼿势的定义实在Eric Hulteen 和Gord Kurtenbach 1990年发表的⼀篇名为⼈机交互中的⼿势(Gestures in Human-Computer Communication),定义如下:”⼿势是⾝体的运动,他包含⼀些信息。
虚拟现实设备的触控功能和手势识别使用技巧虚拟现实(Virtual Reality,简称VR)技术作为一种新兴的科技应用,正在逐渐渗透到我们的生活中。
虚拟现实设备的触控功能和手势识别技巧是使用虚拟现实设备的重要方面。
在这篇文章中,我们将探讨虚拟现实设备的触控功能和手势识别使用技巧。
一、触控功能的使用技巧虚拟现实设备的触控功能是指通过触摸屏幕或控制器上的按钮来进行操作的功能。
触控功能的使用技巧可以极大地提高我们在虚拟现实世界中的操作体验。
首先,了解触控区域。
不同的虚拟现实设备触摸区域的位置和大小可能会有所不同,因此在使用前,我们需要了解设备的触摸区域。
这样可以避免误操作,提高操作的准确性。
其次,熟悉触摸手势。
虚拟现实设备通常支持多种触摸手势,如点击、滑动、缩放等。
熟悉这些手势可以让我们更加高效地进行操作。
例如,在浏览虚拟现实应用时,我们可以使用滑动手势来切换页面,使用缩放手势来放大或缩小内容。
最后,注意触摸力度。
虚拟现实设备通常会根据我们的触摸力度来做出不同的反应,因此我们需要掌握合适的触摸力度。
过轻的触摸力度可能导致设备无法识别,而过重的触摸力度可能导致误操作。
通过适当的练习,我们可以找到合适的触摸力度。
二、手势识别的使用技巧手势识别是指通过手部动作来进行操作的技术。
虚拟现实设备通常配备了手部追踪器,可以实现手势识别。
手势识别的使用技巧可以增加我们在虚拟现实世界中的交互性和沉浸感。
首先,了解支持的手势。
不同的虚拟现实设备支持的手势可能会有所不同。
在使用前,我们需要了解设备支持的手势,并进行相应的练习。
例如,有些设备支持拇指按压手势来进行选择操作,而有些设备则支持手势来进行旋转。
其次,准确识别手势。
手势识别的准确性对于操作体验至关重要。
我们需要确保手势动作的幅度和速度适中,避免过度夸张或过于迅速的动作。
此外,保持手势动作的稳定性也是关键,避免因手部晃动而导致识别错误。
最后,熟悉手势组合。
虚拟现实设备通常支持多种手势组合来实现更复杂的操作。
触摸技术在汽车界面设计中的应用有哪些?一、多点触摸技术多点触摸技术是指汽车界面中可以识别和响应多个触摸输入的技术。
通过多点触摸技术,驾驶员可以使用手指在触摸屏上进行多种操作,如放大、缩小、旋转等。
多点触摸技术的应用为汽车界面设计带来了更加精确和灵活的控制方式。
例如,在导航系统中,驾驶员可以使用两个手指进行缩放操作来放大或者缩小地图,以获得更清晰的导航信息。
二、手势识别技术手势识别技术是指通过分析驾驶员的手势来识别其意图,并进行相应操作的技术。
通过手势识别技术,驾驶员可以使用简单的手势来控制汽车的各种功能。
例如,通过划动手指控制音量的大小,通过摇晃手指来切换歌曲等。
手势识别技术的应用不仅提高了驾驶员的操控便利性,还增加了人机交互的趣味性和舒适性。
三、虚拟按键技术虚拟按键技术是指通过显示屏上的虚拟按键来实现控制的技术。
传统的汽车中,往往需要安装各种物理按钮和开关来进行操作,而虚拟按键技术可以将这些物理按钮转化为显示屏上的虚拟按键,从而提高了界面的整体美观性和灵活性。
驾驶员可以通过触摸虚拟按键来控制汽车的各种功能,如调节温度、切换收音机频道等。
四、语音识别技术语音识别技术是指将驾驶员的语音命令转化为机器可以识别的指令的技术。
通过语音识别技术,驾驶员可以通过口头指令来控制汽车的各种功能,如拨打电话、发送短信、播放音乐等。
语音识别技术的应用大大提高了驾驶员的操控便利性和安全性,使驾驶员能够更加专注于驾驶。
五、个性化界面设计触摸技术还可以实现个性化的界面设计。
通过触摸技术,驾驶员可以根据自己的喜好和需求进行界面的布局和定制,从而提高使用体验。
例如,驾驶员可以将常用的功能快捷方式置于界面的一侧,以便随时调用;或者可以调整显示的颜色和字体大小等来适应自己的视觉需求。
个性化界面设计不仅提高了驾驶员的满意度,还是汽车界面设计的一个重要发展方向。
综上所述,触摸技术在汽车界面设计中的应用非常广泛。
多点触摸技术、手势识别技术、虚拟按键技术、语音识别技术以及个性化界面设计等都为驾驶员提供了更加方便、高效和个性化的操控方式。
我们经常利用触摸屏的Fling、Scroll等Gesture(手势)操作来操作会使得应用程序的用户体验大大提升,比如用Scroll手势在浏览器中滚屏,用Fling在阅读器中翻页等。
在Android系统中,手势的识别是通过 GestureDetector.OnGestureListener接口来实现的,不过翻遍了Android的官方文档也没有找到一个相关的例子,API Demo中的TouchPaint 也仅仅是提到了onTouch事件的处理,没有涉及到手势。
Android Developer讨论组里也有不少人有和我类似的问题,结合他们提到的方法和我所做的实验,我将给大家简单讲述一下Android中手势识别的实现。
我们先来明确一些概念,首先,Android的事件处理机制是基于Listener(监听器)来实现的,比如我们今天所说的触摸屏相关的事件,就是通过onTouchListener。
其次,所有View的子类都可以通过setOnTouchListener()、 setOnKeyListener()等方法来添加对某一类事件的监听器。
第三,Listener一般会以Interface(接口)的方式来提供,其中包含一个或多个abstract(抽象)方法,我们需要实现这些方法来完成onTouch()、onKey()等等的操作。
这样,当我们给某个view设置了事件Listener,并实现了其中的抽象方法以后,程序便可以在特定的事件被dispatch到该view的时候,通过callback函数给予适当的响应。
看一个简单的例子,就用最简单的TextView来说明(事实上和ADT中生成的skeleton 没有什么区别)。
Java代码public class GestureTest extends Activity implements OnTouchListener{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(yout.main);// init TextViewTextView tv = (TextView) findViewById(R.id.page);// set OnTouchListener on TextViewtv.setOnTouchListener(this);// show some texttv.setText(R.string.text);}@Overridepublic boolean onTouch(View v, MotionEvent event) {Toast.makeText(this, onTouch, Toast.LENGTH_SHORT).show();return false;}我们给TextView的实例tv设定了一个onTouchListener,因为GestureTest类实现了OnTouchListener 接口,所以简单的给一个this作为参数即可。
onTouch方法则是实现了OnTouchListener中的抽象方法,我们只要在这里添加逻辑代码即可在用户触摸屏幕时做出响应,就像我们这里所做的—打出一个提示信息。
这里,我们可以通过MotionEvent的getAction()方法来获取Touch事件的类型,包括 ACTION_DOWN, ACTION_MOVE, ACTION_UP, 和ACTION_CANCEL。
ACTION_DOWN是指按下触摸屏,ACTION_MOVE是指按下触摸屏后移动受力点,ACTION_UP则是指松开触摸屏,ACTION_CANCEL不会由用户直接触发(所以不在今天的讨论范围,请参考ViewGroup.onInterceptTouchEvent(MotionEvent))。
借助对于用户不同操作的判断,结合getRawX()、getRawY()、getX()和getY()等方法来获取坐标后,我们可以实现诸如拖动某一个按钮,拖动滚动条等功能。
待机可以看看MotionEvent类的文档,另外也可以看看TouchPaint例子。
回到今天所要说的重点,当我们捕捉到Touch操作的时候,如何识别出用户的Gesture?这里我们需要GestureDetector.OnGestureListener接口的帮助,于是我们的GestureTest 类就变成了这个样子。
Java代码public class GestureTest extends Activity implements OnTouchListener,OnGestureListener {....}随后,在onTouch()方法中,我们调用GestureDetector的onTouchEvent()方法,将捕捉到的MotionEvent交给GestureDetector来分析是否有合适的callback函数来处理用户的手势。
Java代码public boolean onTouch(View v, MotionEvent event) {// OnGestureListener will analyzes the given motion eventreturn mGestureDetector.onTouchEvent(event);}接下来,我们实现了以下6个抽象方法,其中最有用的当然是onFling()、onScroll()和onLongPress()了。
我已经把每一个方法代表的手势的意思写在了注释里,大家看一下就明白了。
// 用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发Java代码@Overridepublic boolean onDown(MotionEvent e) {// TODO Auto-generated method stubToast.makeText(this, onDown, Toast.LENGTH_SHORT).show();return false;}// 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发// 注意和onDown()的区别,强调的是没有松开或者拖动的状态@Overridepublic void onShowPress(MotionEvent e) {// TODO Auto-generated method stub}// 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发@Overridepublic boolean onSingleTapUp(MotionEvent e) {// TODO Auto-generated method stubreturn false;}// 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发Java代码@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {// TODO Auto-generated method stubreturn false;}// 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发@Overridepublic void onLongPress(MotionEvent e) {// TODO Auto-generated method stub}// 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {// TODO Auto-generated method stubreturn false;}我们来试着做一个onFling()事件的处理吧,onFling()方法中每一个参数的意义我写在注释中了,需要注意的是Fling事件的处理代码中,除了第一个触发Fling的ACTION_DOWN 和最后一个ACTION_MOVE中包含的坐标等信息外,我们还可以根据用户在X轴或者Y轴上的移动速度作为条件。
比如下面的代码中我们就在用户移动超过100个像素,且X轴上每秒的移动速度大于200像素时才进行处理。
Java代码@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {// 参数解释:// e1:第1个ACTION_DOWN MotionEvent// e2:最后一个ACTION_MOVE MotionEvent// velocityX:X轴上的移动速度,像素/秒// velocityY:Y轴上的移动速度,像素/秒// 触发条件:// X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY 个像素/秒if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {// Fling leftToast.makeText(this, Fling Left, Toast.LENGTH_SHORT).show();} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {// Fling rightToast.makeText(this, Fling Right, Toast.LENGTH_SHORT).show();}return false;}问题是,这个时候如果我们尝试去运行程序,你会发现我们根本得不到想要的结果,跟踪代码的执行的会发现onFling()事件一直就没有被捕捉到。
这正是一开始困扰我的问题,这到底是为什么呢?我在讨论组的Gesture detection这个帖子里找到了答案,即我们需要在onCreate中tv.setOnTouchListener(this);之后添加如下一句代码。