Android游戏开发之十一:View中如何进行手势识别

移动开发 Android 游戏开发
我们在进行Android游戏开发时会用到很多种控制,包括前面讲到的按键和轨迹球控制方式,除此之外还有手势操作、重力感应等多种控制方式需要了解掌握。本节主要为大家讲解在View中如何进行手势识别。

很多网友发现Android中手势识别提供了两个类,由于Android 1.6以下的版本比如cupcake中无法使用android.view.GestureDetector,而 android.gesture.Gesture是Android 1.6开始支持的,考虑到仍然有使用Android 1.5固件的网友,就来看下兼容性更强的android.view.GestureDetector。在 android.view.GestureDetector类中有很多种重载版本,下面我们仅提到能够自定义在View中的两种方法,分别为 GestureDetector(Context context, GestureDetector.OnGestureListener listener) 和GestureDetector(Context context, GestureDetector.OnGestureListener listener, Handler handler) 。我们可以看到***个参数为Context,所以我们想附着到某View时,最简单的方法就是直接从超类派生传递Context,实现 GestureDetector里中提供一些接口。

下面我们就以实现手势识别的onFling动作,在CwjView中我们从View类继承,当然大家可以从TextView等更高层的界面中实现触控。

  1. class CwjView extends View {    
  2.     private GestureDetector mGD;    
  3.     public CwjView(Context context, AttributeSet attrs) {    
  4.         super(context, attrs);    
  5.         mGD = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {    
  6.                 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {    
  7.                     int dx = (int) (e2.getX() - e1.getX()); //计算滑动的距离    
  8.                     if (Math.abs(dx) > MAJOR_MOVE && Math.abs(velocityX) > Math.abs(velocityY)) { //降噪处理,必须有较大的动作才识别    
  9.                         if (velocityX > 0) {    
  10.                            //向右边    
  11.    
  12.                         } else {    
  13.                             //向左边    
  14.                         }    
  15.                         return true;    
  16.                     } else {    
  17.                         return false;  //当然可以处理velocityY处理向上和向下的动作    
  18.                     }    
  19.                 }    
  20.             });    
  21.     }    
  22.   /*提示大家上面仅仅探测了Fling动作仅仅实现了onFling方法,这里相关的还有以下几种方法来实现具体的可以参考我们以前的文章有详细的解释:   
  23.  boolean  onDoubleTap(MotionEvent e)    
  24.  boolean  onDoubleTapEvent(MotionEvent e)    
  25.  boolean  onDown(MotionEvent e)    
  26.  void  onLongPress(MotionEvent e)    
  27.  boolean  onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)    
  28.  void  onShowPress(MotionEvent e)    
  29.  boolean  onSingleTapConfirmed(MotionEvent e)    
  30.  boolean  onSingleTapUp(MotionEvent e)    
  31.  */   
  32.    //接下来是重点,让我们的View接受触控,需要使用下面两个方法让GestureDetector类去处理onTouchEvent和onInterceptTouchEvent方法。    
  33.     @Override   
  34.     public boolean onTouchEvent(MotionEvent event) {      
  35.         mGD.onTouchEvent(event);    
  36.         return true;    
  37.     }    
  38.     @Override   
  39.     public boolean onInterceptTouchEvent(MotionEvent event) {    
  40.         return mGD.onTouchEvent(event);    
  41.     }    
  42. }   

本节关于View中手势识别的内容就讲这些。大家知道,很多Android设备都提供了重力感应器和加速度感应器,而稍好些的设备还具备陀螺仪感应器,提供测试角速度功能。下一节将为大家讲解重力感应知识。

责任编辑:闫佳明 来源: jizhuomi
相关推荐

2023-12-11 08:25:15

Java框架Android

2010-02-06 14:52:53

Android平台

2010-02-01 14:48:43

2013-05-20 17:33:44

Android游戏开发自定义View

2022-05-17 12:25:59

物联网智能建筑楼宇自控

2018-04-18 08:57:59

AndroidiOS移动系统

2011-09-02 14:37:32

UbuntuAndroid

2010-02-05 16:35:35

Android操作系统

2017-09-08 13:30:32

深度学习图像识别卷积神经网络

2010-03-03 15:06:52

Android 游戏开

2010-11-01 09:46:21

ViewAndroid

2010-02-04 17:42:15

Android数据库

2011-08-22 12:05:50

Linux

2021-05-17 14:02:38

Swift 多重排序

2013-01-05 10:16:26

需求开发

2021-12-01 15:52:56

安全开发测试

2013-05-20 17:07:26

2010-06-12 15:41:28

UML建模

2013-02-21 10:32:29

Win Server 灾难恢复虚拟机

2013-05-20 17:04:09

点赞
收藏

51CTO技术栈公众号