android学习笔记

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1,android手势开发识别Gestrue开发

(/tsdl2009/archive/2010/08/13/5810922.aspx)

经过了一段Android的学习,基本上了解了Android的基础知识。今天,我们来研究一下Android中特有的手势识别技术,即Gesture。首先,我从网上找了很多资料,具体归纳起来有2类:一类是触摸屏手势识别,另一类是输入法手势识别。

我们先来讨论一下第一类触摸屏手势识别,这个比较简单,就是利用触摸屏的Fling、Scroll等Gesture(手势)来操作屏幕,比如用Scroll手势在浏览器中滚屏,用Fling在阅读器中翻页等。在Android系统中,手势的识别是通过GestureDetector.OnGestureListener接口来实现的。下面通过我自己的一个动手实验来进行介绍。

首先,我们在Eclipse中创建一个工程,名称叫SignFilpDemo。然后,在src 中创建一个SignFilpDemo源文件。这个工程是基于Android1.6的。因为,在Android 1.6之前的版本中,需要开发者编写大量的代码才能实现某些更为复杂的Gestures功能。而在之后的版本SDk中嵌入标准的Gestures API库(Package: android.gesture),包括了所有与Gesture技术相关的操作:存储、加载、创建新Gestures和识别等。其工程结构如下:

图1

接着,我们知道Android的事件处理机制是基于Listener(监听器)来实现的,比如我们今天所说的触摸屏相关的事件,就是通过onTouchListener。因此,我们在源代码中要实现这个接口。另外,我们还要实现OnGestureListener接口,因为,那个手势的识别是通过GestureDetector.OnGestureListener接口来实现的。其中,onTouchEvent方法则是实现了OnTouchListener中的抽象方法,我们只要在这里添加逻辑代码即可在用户触摸屏幕时做出响应。在这里我们调用GestureDetector的onTouchEvent()方法,将捕捉到的MotionEvent交给GestureDetector 来分析是否有合适的callback函数来处理用户的手势。接下来,就是实现了以下6个抽象方法,其中最有用的当然是onFling()、onScroll()和onLongPress()了。下面介绍一下:

(1)用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发,其源代码如下:

public boolean onDown(MotionEvent e) {

return false;

}

public void onShowPress(MotionEvent e) {

}

(2)用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP 触发,其源代码如下:

public boolean onSingleTapUp(MotionEvent e) {

return false;

}

(3)用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发

// 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发

public void onLongPress(MotionEvent e) {

}

// 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY) {

return false;

}

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {

return false;

}

我们今天来做一个onFling()事件的处理吧,这里需要注意的是

Fling事件的处理代码中,除了第一个触发Fling的

ACTION_DOWN和最后一个ACTION_MOVE中包含的坐标等信息外,

我们还可以根据用户在X轴或者Y轴上的移动速度作为条件。在这

个例子中,我们是根据用户在屏幕上移动的x轴坐标或者是y轴坐

标位移来判断方向。如果x轴坐标位移大于50向左,小于-50向

右,如果y轴坐标位移大于50向上,小于-50向下。源代码如下:

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

if (e1.getX() - e2.getX() > 50) {

Toast.makeText(SignFlipDemo.this, "左",

Toast.LENGTH_LONG).show();

return true;

} else if (e1.getX() - e2.getX() < -50) {

Toast.makeText(SignFlipDemo.this, "右", Toast.LENGTH_LONG).show();

return true;

} else if (e1.getY() - e2.getY() > 50) {

Toast.makeText(SignFlipDemo.this, "上", Toast.LENGTH_LONG).show();

return true;

} else if (e1.getY() - e2.getY() < -50) {

Toast.makeText(SignFlipDemo.this, "下", Toast.LENGTH_LONG).show();

return true;

}

return false;

}

如果鼠标向上移动,运行效果如下图2所示:

相关文档
最新文档