知识不分你我。转载自:http://blog.163.com/gpf1987@126/blog/static/140401677201212921237657/

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 代码清单:

package com.mapuni.ryuan.gesture;import java.util.ArrayList;import android.app.Activity;
import android.content.Intent;
import android.gesture.Gesture;
import android.gesture.GestureLibraries;
import android.gesture.GestureLibrary;
import android.gesture.GestureOverlayView;
import android.gesture.GestureOverlayView.OnGesturePerformedListener;
import android.gesture.Prediction;
import android.net.Uri;
import android.os.Bundle;
import android.widget.Toast;public class GestureActivity extends Activity {private GestureLibrary library;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);GestureOverlayView gestureView = (GestureOverlayView) findViewById(R.id.gestures);gestureView.addOnGesturePerformedListener(new GestureListener());/* 加载手势库 */library = GestureLibraries.fromRawResource(this, R.raw.gestures);library.load();}/*** 手势监听器* @author Administrator**/private final class GestureListener implements OnGesturePerformedListener {@Overridepublic void onGesturePerformed(GestureOverlayView overlay,Gesture gesture) {/** 查找手势库中与用户画的手势库有些相似性的手势集合 并按照相似性度高到低排序,与用户画的图形最相似的手势,放在集合第一个位置*/ArrayList<Prediction> predictions = library.recognize(gesture);if (predictions != null && !predictions.isEmpty()) {// 第0个手势是最匹配的手势Prediction prediction = predictions.get(0);// prediction.score 是相似度,是一个大于0、小于10的双精度数值,1就是10%相似,3就是30%相似度。if (prediction.score > 4) {if ("ok".equals(prediction.name)) {Toast.makeText(getApplicationContext(), "You Said OK", 1).show();} else if ("cancel".equals(prediction.name)) {Toast.makeText(getApplicationContext(), "You Said Cancel", 1).show();/*Uri uri = Uri.parse("tel:10086");Intent intent = new Intent(Intent.ACTION_CALL, uri);startActivity(intent);*/}} else {Toast.makeText(getApplicationContext(), "手势不能识别", 1).show();}}}}/*** 销毁 Activity ,并关闭应用*/@Overrideprotected void onDestroy() {android.os.Process.killProcess(android.os.Process.myPid());super.onDestroy();}}

转载于:https://www.cnblogs.com/LiuSiyuan/archive/2012/10/30/2745736.html

Android深入探究笔记--手势识别相关推荐

  1. Android:日常学习笔记(8)———探究UI开发(2)

    Android:日常学习笔记(8)---探究UI开发(2) 对话框 说明: 对话框是提示用户作出决定或输入额外信息的小窗口. 对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件. 提示 ...

  2. Android:日常学习笔记(6)——探究活动(3)

    Android:日常学习笔记(6)--探究活动(3) 活动的生命周期 返回栈 Android中的活动是可以叠加的,我们每启动一个新活动,就会覆盖在原来的活动上,点击Back以后销毁最上面的活动,下面的 ...

  3. Android:日常学习笔记(8)———探究UI开发(5)

    Android:日常学习笔记(8)---探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...

  4. Android群英传笔记——第四章:ListView使用技巧

    Android群英传笔记--第四章:ListView使用技巧 近期也是比較迷茫.可是有一点点还是要坚持的,就是学习了.近期离职了,今天也是继续温习第四章ListView,也拖了事实上也挺久的了,lis ...

  5. java/android 设计模式学习笔记(1)--- 单例模式

    前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...

  6. Android实例剖析笔记(四)

    摘要:分析NoteEditor这个类和以及Content Provider机制 NoteEditor深入分析 首先来弄清楚"日志编辑"的状态转换,通过上篇文章的方法来做下面这样一个 ...

  7. Android Binder 学习笔记

    前言: Binder是Android给我们提供的一种跨进程通信方式.理解Binder能帮助我们更好的理解Android的系统设计,比如说四大组件,AMS,WMS等系统服务的底层通信机制就都是基于Bin ...

  8. Android初级开发笔记-- activity启动模式的学习(1)

    第一次学习Android中一个很重要的概念,启动模式.文章记录的也只是一些入门知识,随着学习的深入还会有activity启动模式的学习(2)和(3). 下面分三个小点说一下对启动模式的理解区别以及如何 ...

  9. Android Studio --- [学习笔记]TCP(第2弹)、GridView、ScrollView

    说明 这篇主要接上一篇Android Studio - > [学习笔记]RadioButton.CheckBox.ImageView.ListView.TCP的三次握手 对上面回答的细解,并用J ...

最新文章

  1. 清华团队将Transformer用到3D点云分割
  2. 部署Configuration Manager主站点以及辅助站点
  3. Linux系统中重启tomcat的一般步骤
  4. 解析#pragma指令
  5. c# 泛型study
  6. doc转docx文件会乱吗_Word文档doc与docx的区别
  7. Sublime一些问题以及解决方法
  8. mysql 帮助文档使用
  9. python用模块读取xml文件_Python之xml文档及配置文件处理(ElementTree模块、ConfigParser模块)...
  10. webstrom 汉化方法
  11. autojs通用拾色器
  12. VM技术(一)NES模拟器VM综述
  13. 数字电路28(设计步骤及十进制加计数器设计)
  14. dell R720 单盘raid0配置
  15. starUML建立模型及生成代码框架
  16. PwC普华永道——招聘
  17. AndroidStudio子线程更新UI的几种方式
  18. ggplot2设置坐标轴范围_ggplot2|详解八大基本绘图要素
  19. Linux Socket 两个客户端通信,服务端作为中转
  20. Python简单几行代码实现黑客电影镜头屏幕画面

热门文章

  1. 查看linux服务器的配置
  2. Java问题定位之如何借助线程堆栈进行问题分析
  3. IDEA里如何安装Python插件打造开发环境(图文详解)
  4. matplotlib 数据可视化
  5. 【留言板 Message Board】
  6. js-this作用域
  7. SQL Server 加密层级
  8. 从程序员到项目经理(9):程序员加油站 -- 再牛也要合群【转载】
  9. 商汤港理工提出基于聚类的联合建模时空关系的 GroupFormer 用于解决群体活动识别问题,性能SOTA...
  10. HandAI开源项目,拉近人和摄影的距离:基于手势识别完成不同的拍摄行为