手势识别系统:

先把手势库放到项目中:(创建手势库见下一篇博客)

在res文件夹下新建一个名为raw的文件夹,然后把手势库放进去

然后开始项目的创建:

strings.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <string name="app_name">GestureTest</string>
  4. <string name="notrecognize">没有手势</string>
  5. <string name="noprediction">手势识别率太低,请重新输入</string>
  6. <string name="noloading">手势库没有加载成功</string>
  7. </resources>

main.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <android.gesture.GestureOverlayView
  7. android:id="@+id/myGesture"
  8. android:layout_width="fill_parent"
  9. android:layout_height="0dip"
  10. android:layout_weight="1.0"
  11. />
  12. </LinearLayout>

GestureTestActivity.java:

  1. package cn.csdn.gesture;
  2. import java.util.ArrayList;
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.gesture.Gesture;
  6. import android.gesture.GestureLibraries;
  7. import android.gesture.GestureLibrary;
  8. import android.gesture.GestureOverlayView;
  9. import android.gesture.GestureOverlayView.OnGesturePerformedListener;
  10. import android.gesture.Prediction;
  11. import android.net.Uri;
  12. import android.os.Bundle;
  13. import android.util.Log;
  14. import android.widget.Toast;
  15. public class GestureTestActivity extends Activity {
  16. GestureOverlayView gestureView;
  17. GestureLibrary gLibrary;
  18. boolean loadState;
  19. public void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.main);
  22. init();
  23. }
  24. private void init() {
  25. gestureView = (GestureOverlayView) this.findViewById(R.id.myGesture);
  26. gestureView
  27. .addOnGesturePerformedListener(new MyOnGesturePerformedListener());
  28. // 创建首饰库对象GestureLibrary
  29. gLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);
  30. // 加载手势库资源
  31. loadState = gLibrary.load();
  32. }
  33. private final class MyOnGesturePerformedListener implements
  34. OnGesturePerformedListener {
  35. public void onGesturePerformed(GestureOverlayView overlay,
  36. Gesture gesture) {
  37. if (loadState) {//加载手势资源成功
  38. // 获取画的图形进行匹配,匹配程度就是Prediction中的score
  39. ArrayList<Prediction> predictions = gLibrary.recognize(gesture);
  40. if (!predictions.isEmpty()) {// 如果用户画了图形,就会匹配
  41. Prediction prediction = predictions.get(0);
  42. Log.i("TAG", String.valueOf(prediction.score));
  43. if (prediction.score > 5) {// 判断相似度大于1,与里面的两者进行匹配
  44. if ("close".equals(prediction.name)) {//关闭
  45. finish();
  46. } else if ("dialto".equals(prediction.name)) {//打电话
  47. Intent intent = new Intent(Intent.ACTION_CALL,
  48. Uri.parse("tel:11111111111"));
  49. startActivity(intent);
  50. }
  51. } else {// 相似度小于1,不识别
  52. showToast(R.string.noprediction);
  53. }
  54. } else {//没有画图形
  55. showToast(R.string.notrecognize);
  56. }
  57. } else {
  58. showToast(R.string.noloading);
  59. }
  60. }
  61. }
  62. private void showToast(int tesId) {
  63. Toast.makeText(this, tesId, Toast.LENGTH_LONG).show();
  64. }
  65. }

效果图:(必须画的比较精确)

如果画c形状的话,会退出这个程序

如果画一个对钩的话,会去进行拨号的操作

Android成长之路-手势识别的实现的更多相关文章

  1. Android成长之路-实现简单动画

    实现简单动画: 在drawable目录中放入图片, 并且创建xml文件 frame.xml 存入图片,如下: <pre class="html" name="cod ...

  2. Android成长之路-编码实现软件界面

    实现一个登陆界面: 相对布局: package cn.csdn.codeui; import android.app.Activity; import android.os.Bundle; impor ...

  3. Android成长之路-手势库的创建

      手势库的创建: 使用SDK自带的例子GestureBuilder建立手势库,这个文件夹存在于android\android-sdk-windows \samples\android-10\Gest ...

  4. Android成长之路-LayoutInflater和inflate的用法

    在这里用Tabhost的例子来说明: package cn.csdn.activity; import android.app.TabActivity; import android.os.Bundl ...

  5. Android成长之路-实现监听器的三种方法

      第一种:  在Test类中  定义一个类接口OnClickListener 第二种:直接在Test类上写一个接口 其中的this相当于new OnClickListener()对象, 即class ...

  6. 【腾讯Bugly干货分享】JSPatch 成长之路

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/579efa7083355a9a57a1ac5b Dev Club 是一个交流移动 ...

  7. 阿里技术分享:阿里自研金融级数据库OceanBase的艰辛成长之路

    本文原始内容由作者“阳振坤”整理发布于OceanBase技术公众号. 1.引言 OceanBase 是蚂蚁金服自研的分布式数据库,在其 9 年的发展历程里,从艰难上线到找不到业务场景濒临解散,最后在双 ...

  8. redis成长之路——(二)

    redis操作封装 针对这些常用结构,StackExchange.Redis已经做了一些封装,不过在实际应用场景中还必须添加一些功能,例如重试等 所以对一些常功能做了一些自行封装SERedisOper ...

  9. redis成长之路——(一)

    为什么使用redis Redis适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就 ...

随机推荐

  1. ExtJs 3 自定义combotree

    ExtJs 3 自定义combotree /** * 自定义下拉树,支持初始化值时自动定位树节点. * 还没有考虑性能问题.继承自Ext.form.ComboBox也很浪费. * 代码中的cu.get ...

  2. directio mysql 编绎选项

    http://www.myexception.cn/linux-unix/495407.html http://www.iyunv.com/thread-25950-1-1.html

  3. Are you sure your NDK_MODULE_PATH variable is properly defined?(2)

    Are you sure your NDK_MODULE_PATH variable is properly defined? STEP1:   MIND: 明确NDK_MODULE_PATH概念ht ...

  4. OpenERP实施记录(10):采购补货

    本文是<OpenERP实施记录>系列文章的一部分. 上文中业务部门接到沃尔玛三台联想Y400N笔记本电脑的订单,但是仓库无货.本文需要完成采购补货处理. 1. 联想YN400N是ABC公司 ...

  5. Arcgis license 服务无法启动的解决问题

    来自:http://blog.csdn.net/u013719339/article/details/51240312 1.检查服务开没开.打开资源管理器然后按照下面就出现了.也可以打开运行——ser ...

  6. Net线程足迹 传递参数至线程

    方法一:应用ParameterizedThreadStart这个委托来传递输入参数,这种方法适用于传递单个参数的情况. using System; using System.Collections.G ...

  7. 有用的iOS网站地址

    王巍 (@onevcat) 是一名 iOS 和 Unity3D 开发者,现旅居日本,正在寻求创意之源.http://swifter.tips/http://onevcat.com/2013/02/xc ...

  8. 关于新一代Android的一切Android L (2014-07-04)

    谷歌在今年的I/O大会上一改曾经的传统,由发布新版Android改为发布Android L的开发者预览版本,而其正式版本将会在今年秋天面世,这种方式将会方便开发者在正式版发布之前尽早对自己应用进行优化 ...

  9. Python学习(一)安装、环境配置及IDE推荐

    Python的安装.环境配置及IDE推荐 官网:https://www.python.org/ 版本:2.x 和 3.x 差别较大:python3是不向下兼容:版本区别可参考网官网介绍 至于选择 Py ...

  10. iOS:下拉刷新控件UIRefreshControl的详解

    下拉刷新控件:UIRefreshControl 1.具体类信息: @interface UIRefreshControl : UIControl //继承控制类 - (instancetype)ini ...