`

Android深入探究笔记之二十三--手势识别

阅读更多

1.  建立手势库

        使用 SDK 自带例子 GestureBuilder 建立手势库(位置: android-sdk-windows\samples\android-8\GestureBuilder )。

        使用 GestureBuilder 之前,你需要恢复其到开发环境,然后进行编绎并部署到手机上。

        此时,就可以使用 GestureBuilder 建立手势库,生成的手势库文件在 SCDard 上,默认文件名称为: gestures

      

        具体步骤:

               1.  新建一个   Android  项目,项目名称为   GestureBuilder

               2.  进入到   android-sdk-windows\samples\

                   进入到对应的版本   SDK  目录,因为我使用的是   Android2.2

                   于是再进入到   android-8  目录下,打开   GestureBuilder  项目

               3.  选中   GestureBuilder  项目的   graphics res src  文件夹     AndroidManifest.xml  文件 , 复制它们

               4.  再进入到我们自己新建的   GestureBuilder  下,删掉自己的   graphics res src  文件夹     AndroidManifest.xml  文件

                   再将复制的内容粘贴到文件夹下。昨晚这些项目,就相当于将   Android   例子程序   GestureBuilder  导入进了   eclipse  环境中

                 

               5.  然后再将项目部属到模拟器上。出现一个添加手势库的程序。

             

               6.  点击   "Add gesture" ,就可以添加一个手势。

                   在屏幕上画出一个图形,再在屏幕上方为这个图形输入一个名字。就完成了一个手势的添加。如图:

图一:绘图

                     

               

             图二:主界面,点击  "Add gesture" 和可进入到绘图界面

                   

             

               7.  点击   "Done"  按钮可以保存这个手势到手势库文件

             

               8.  所有添加的手势都被保存到了   SD  卡根目录下的   gestures  手势库文件中。

             

        我添加了两个手势:一个   " "  形图形,名称为   "close" ;  一个   "W" ,名称为   "wjh"

        在接下来的示例应用中,将用到这两个手势。当在应用中,画出   " "  形手势时,将关闭应用。当画出   "W"  手势时,将拨打   wjh  的电话号码。

      

2.  新建   Android  项目:   Gesture

    将生成的手势文件导出来,并放置在   Gesture  应用中。

    为了便于查找和使用,在   Gesture  应用的   res  目录下再新建一个   raw  目录,将手势库文件放置在此目录下面。如图:

   

     


3.  界面设计,提供一个场地,使用户可以在此控件上可以画手势

    使用   android.gesture.GestureOverlayView  控件

       <android.gesture.GestureOverlayView

             android:id="@+id/gestures"

             android:layout_width="fill_parent"

             android:layout_height="0dip"

             android:layout_weight="1.0" />

 

4.  当一个手势画完毕后,会触发一个事件

        GestureOverlayView.addOnGesturePerformedListener(OnGesturePerformedListener listener)

    将用户一个手势画完后,就会调用   OnGesturePerformedListener    onGesturePerformed  方法。因此我们适合关注此方法,对手势进行识别。

       public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture);

 

5.  加载手势库

        GestureLibrary library = GestureLibraries.fromRawResource(this, R.raw.gestures);

        library.load();

 

6.  取出匹配集合

        /*  查找手势库中与用户画的手势库有些相似性的手势集合

          *  并按照相似性度高到低排序,与用户画的图形最相似的手势,放在集合第一个位置   */

          ArrayList<Prediction> predictions = library.recognize(gesture);

 

7.  单手势识别   Activity  代码清单:

      

  1. public   class  MainActivity  extends  Activity {  
  2.            private  GestureLibrary library;  
  3.            @Override   
  4.            public   void  onCreate(Bundle savedInstanceState) {  
  5.                super .onCreate(savedInstanceState);  
  6.                setContentView(R.layout.main);  
  7.                 
  8.                GestureOverlayView gestureView = (GestureOverlayView) findViewById(R.id.gestures);  
  9.                gestureView.addOnGesturePerformedListener(new  GestureListener());  
  10.                /* 加载手势库 */   
  11.                library = GestureLibraries.fromRawResource(this , R.raw.gestures);  
  12.                library.load();  
  13.            }  
  14.             
  15.            private   final   class  GestureListener  implements  OnGesturePerformedListener {  
  16.                      @Override   
  17.                      public   void  onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {  
  18.                             /* 查找手势库中与用户画的手势库有些相似性的手势集合  
  19.                              * 并按照相似性度高到低排序,与用户画的图形最相似的手势,放在集合第一个位置 */   
  20.                              ArrayList<Prediction> predictions = library.recognize(gesture);  
  21.                                
  22.                              if (predictions !=  null  && !predictions.isEmpty()) {  
  23.                                     // 第0个手势是最匹配的手势   
  24.                                     Prediction prediction = predictions.get(0 );  
  25.                                     // prediction.score 是相似度,是一个大于0、小于10的双精度数值,1就是10%相似,3就是30%相似度。   
  26.                                     if (prediction.score >  1 ) {  
  27.                                            if ( "close" .equals(prediction.name)) {  
  28.                                                   finish();  
  29.                                            } else   if ( "wjh" .equals(prediction.name)) {  
  30.                                                   Uri uri = Uri.parse("tel:10086" );  
  31.                                                   Intent intent = new  Intent(Intent.ACTION_CALL, uri);  
  32.                                                   startActivity(intent);  
  33.                                            }  
  34.                                     } else  {  
  35.                                            Toast.makeText(getApplicationContext(), "手势不能识别" 1 ).show();  
  36.                                     }  
  37.                              }  
  38.                      }  
  39.            }  
  40.             
  41.            /**  
  42.             * 销毁  Activity ,并关闭应用  
  43.             */   
  44.            @Override   
  45.            protected   void  onDestroy() {  
  46.                   android.os.Process.killProcess(android.os.Process.myPid());  
  47.                   super .onDestroy();  
  48.            }  
  49.        }  
 

             

        AndroidManifest.xml  添加拨打电话权限

        

  1. <? xml   version = "1.0"   encoding = "utf-8" ?>   
  2.               < manifest   xmlns:android = "http://schemas.android.com/apk/res/android"   
  3.                     package = "wjh.android.gesture" line-height: 18px; margin: 0
    分享到:
    评论

相关推荐

    Android深入探究笔记之二十-广播接收者.pdf

    Android深入探究笔记之二十-广播接收者.pdf

    新版Android开发教程&笔记--基础入门

    新版Android开发教程&笔记--基础入门二 新版Android开发教程&笔记三--环境搭建与解析 新版Android开发教程&笔记四--Dalvik ADB 新版Android开发教程+笔记五--模拟器、应用1、2 新版Android开发教程+笔记六--应用3、4...

    新版android开发教程 笔记

    新版Android开发教程&笔记--基础入门二 新版Android开发教程&笔记三--环境搭建与解析 新版Android开发教程&笔记四--Dalvik ADB 新版Android开发教程+笔记五--模拟器、应用1、2 新版Android开发教程+笔记六--应用3、4...

    新版Android开发教程及笔记-完整版.pdf

    新版Android开发教程&笔记--基础入门二.pdf 新版Android开发教程&笔记三--环境搭建与解析.pdf 新版Android开发教程&笔记四--Dalvik ADB.pdf 新版Android开发教程+笔记五--模拟器、应用1、2.pdf 新版Android开发教程+...

    Android 开发教程 新版Android开发教程&笔记

    新版Android开发教程&笔记一--基础入门1 新版Android开发教程&笔记二--基础入门2 新版Android开发教程&笔记三--环境搭建与解析 新版Android开发教程&...新版Android开发教程&笔记十三(待续)--应用、permission、资源

    新版Android开发教程和笔记

    新版Android开发教程&笔记--基础入门二.pdf 新版Android开发教程&笔记三--环境搭建与解析.p 新版Android开发教程&笔记四--Dalvik ADB.pdf 新版Android开发教程+笔记七--基础UI编程1.pdf 新版Android开发教程+...

    Android群英传笔记-----by ---------刘某人程序员

    《Android群英传笔记》是一本...总的来说,《Android群英传笔记》是Android开发者的一份珍贵参考资料,它涵盖了Android开发的各个关键领域,通过深入学习,你将能够提升自己的专业技能,成为一名真正的Android群英。

    android学习笔记最新版(1-4)

    第二部分《Android开发教程&笔记--基础入门二.rar》将深入到UI设计,讲解如何使用XML布局文件来构建用户界面,包括各种视图控件(如TextView、Button、EditText等)的使用,以及布局管理器(如LinearLayout、...

    Android开发教程(完整版)

    新版Android开发教程&笔记--基础入门二.pdf 新版Android开发教程&笔记三--环境搭建与解析.pdf 新版Android开发教程&笔记四--Dalvik ADB.pdf 新版Android开发教程+笔记五--模拟器、应用1、2.pdf 新版Android开发教程+...

    笔记记录分享-笔记记录分享网站-笔记记录分享网站源码-笔记记录分享网站java代码-基于springboot的笔记记录分享网站

    笔记记录分享-笔记记录分享网站-笔记记录分享网站源码-笔记记录分享网站java代码-笔记记录分享网站设计与实现-基于springboot的笔记记录分享网站-基于Web的笔记记录分享网站设计与实现-笔记记录分享项目-笔记记录...

    Android零基础教程视频链接

    android基础教程,里边包括新版Android开发教程&笔记1--基础入门,Android开发教程&笔记2--基础入门二,Android开发教程&笔记3--环境搭建与解析,Android开发教程&笔记4--Dalvik ADB Android开发教程+笔记5--模拟器...

    Android学习笔记之记录与出错--千锋培训

    启动模拟器或连接真实设备后,确保Android Studio已识别到设备,然后切换到LogCat视图,就可以看到程序运行时的Log信息。这对于定位程序逻辑错误、理解程序运行流程和调试异常情况非常有用。 总的来说,掌握Log的...

    Android开发教程完全版

    新版Android开发教程&笔记--基础入门二.pdf 新版Android开发教程&笔记三--环境搭建与解析.pdf 新版Android开发教程&笔记四--Dalvik ADB.pdf 新版Android开发教程+笔记五--模拟器、应用1、2.pdf 新版Android开发教程+...

    HotApp云笔记 - 精品开源demo-基于免费API(源代码+截图)

    HotApp云笔记 - 精品开源demo-基于免费API(源代码+截图)HotApp云笔记 - 精品开源demo-基于免费API(源代码+截图)HotApp云笔记 - 精品开源demo-基于免费API(源代码+截图)HotApp云笔记 - 精品开源demo-基于免费API(源...

    python超基础学习笔记 (二十)- easygui的安装和简单应用

    python超基础学习笔记 (二十)- easygui的安装和简单应用

    android基础教程

    新版Android开发教程&笔记2--基础入门二.pdf 新版Android开发教程&笔记3--环境搭建与解析.pdf 新版Android开发教程&笔记4--Dalvik ADB.pdf 新版Android开发教程+笔记5--模拟器、应用1、2.pdf 新版Android开发教程+...

    android开发资料1

    ├新版Android开发教程&笔记--基础入门二.pdf ├新版Android开发教程&笔记--基础入门一.pdf ├新版Android开发教程&笔记三--环境搭建与解析.pdf ├新版Android开发教程&笔记四--Dalvik ADB.pdf ├新版Android开发...

    新版Android开发资料2

    ├新版Android开发教程&笔记--基础入门二.pdf ├新版Android开发教程&笔记--基础入门一.pdf ├新版Android开发教程&笔记三--环境搭建与解析.pdf ├新版Android开发教程&笔记四--Dalvik ADB.pdf ├新版Android开发...

    Android 学习笔记(1)--永远不变的Hello World

    【Android 学习笔记(1)--永远不变的Hello World】 Android 开发是移动应用开发领域的重要组成部分,尤其对于新手而言,"Hello, World!" 是入门的起点。在这个学习笔记中,我们将探讨如何创建第一个简单的 Android...

Global site tag (gtag.js) - Google Analytics