Android的gesture的识别和自定义gesture


介绍下和手势和多点触摸相关的知识。。。。。。

先上个一道菜,手势的识别。。。。。

  1. java.lang.Object  
  2.    ↳    Android.view.View  
  3.        ↳    android.view.ViewGroup  
  4.            ↳    android.widget.FrameLayout  
  5.                ↳    android.gesture.GestureOverlayView  

介绍下GestureOverlayView,这个透明的view就是让你在上面画手势用的,可叠在其他View上面。

Android的gesture的识别和自定义gesture源码下载地址:

免费下载地址在 http://linux.bkjia.com/

用户名与密码都是www.bkjia.com

具体下载目录在 /pub/Android源码集锦/2011年/12月/Android的gesture的识别和自定义gesture/

和这个类相关的还有三个接口,分别是

GestureOverlayView.OnGestureListener;

GestureOverlayView.OnGesturePerformedListener(作用:根据在GestureOverlayView上画的手势来识别是否匹配手势库里的手势);

GestureOverlayView.OnGesturingListener.


GestureOverlayView的xml的属性介绍:

android:gestureStrokeType 

设置手势的笔画数,它有两个值,GESTURE_STROKE_TYPE_MULTIPLE(多笔),GESTURE_STROKE_TYPE_SINGLE(一笔)

  1. public final class GestureLibraries  
 
  1. static GestureLibrary   fromFile(File path)   
  2. static GestureLibrary   fromFile(String path)   
  3. static GestureLibrary   fromPrivateFile(Context context, String name)   
  4. static GestureLibrary   fromRawResource(Context context, int resourceId)  

想从SD卡或者raw的资源中直接加载手势;


下面介绍下手势的识别功能,先上代码:

GestureIdentifyDemoActivity.xml

  1. package com.potato;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import android.app.Activity;  
  6. import android.gesture.Gesture;  
  7. import android.gesture.GestureLibraries;  
  8. import android.gesture.GestureLibrary;  
  9. import android.gesture.GestureOverlayView;  
  10. import android.gesture.Prediction;  
  11. import android.os.Bundle;  
  12. import android.widget.Toast;  
  13.   
  14. public class GestureIdentifyDemoActivity extends Activity {  
  15.     // 手势库   
  16.     GestureLibrary mGestureLib;  
  17.   
  18.     /** Called when the activity is first created. */  
  19.     @Override  
  20.     public void onCreate(Bundle savedInstanceState) {  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(R.layout.main);  
  23.   
  24.         // 手势画板   
  25.         GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gesture_overlay_view_test);  
  26.         // 手势识别的监听器   
  27.         gestures.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {    // 注1   
  28.   
  29.             @Override  
  30.             public void onGesturePerformed(GestureOverlayView overlay,  
  31.                     Gesture gesture) {  
  32.                 //从手势库中查询匹配的内容,匹配的结果可能包括多个相似的结果,匹配度高的结果放在最前面     
  33.                 ArrayList<Prediction> predictions = mGestureLib  
  34.                         .recognize(gesture);                        // 注3   
  35.                                               
  36.                 if (predictions.size() > 0) {  
  37.                     Prediction prediction = (Prediction) predictions.get(0);  
  38.                     // 匹配的手势   
  39.                     if (prediction.score > 1.0) {  
  40.                         Toast.makeText(GestureIdentifyDemoActivity.this,  
  41.                                 prediction.name, Toast.LENGTH_SHORT).show();  
  42.                     }  
  43.                 }  
  44.   
  45.             }  
  46.         });  
  47.         // 从raw中加载已经有的手势库   
  48.         mGestureLib = GestureLibraries.fromRawResource(this, R.raw.gestures);       // 注2   
  49.         if (!mGestureLib.load()) {  
  50.             finish();  
  51.         }  
  52.   
  53.     }  
  54. }  
注1:
  1. gestures.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener()  
手势识别的监听器。。。。

注2:

  1. mGestureLib = GestureLibraries.fromRawResource(this, R.raw.gestures);  
从res/raw/加载gestures手势这个文件

注3:

  1. ArrayList<Prediction> predictions = mGestureLib.recognize(gesture);  
  • 1
  • 2
  • 3
  • 4
  • 下一页

相关内容