Android成长之路-手势识别的实现
手势识别系统:
先把手势库放到项目中:(创建手势库见下一篇博客)
在res文件夹下新建一个名为raw的文件夹,然后把手势库放进去
然后开始项目的创建:
strings.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <string name="app_name">GestureTest</string>
- <string name="notrecognize">没有手势</string>
- <string name="noprediction">手势识别率太低,请重新输入</string>
- <string name="noloading">手势库没有加载成功</string>
- </resources>
main.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <android.gesture.GestureOverlayView
- android:id="@+id/myGesture"
- android:layout_width="fill_parent"
- android:layout_height="0dip"
- android:layout_weight="1.0"
- />
- </LinearLayout>
GestureTestActivity.java:
- package cn.csdn.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.util.Log;
- import android.widget.Toast;
- public class GestureTestActivity extends Activity {
- GestureOverlayView gestureView;
- GestureLibrary gLibrary;
- boolean loadState;
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- init();
- }
- private void init() {
- gestureView = (GestureOverlayView) this.findViewById(R.id.myGesture);
- gestureView
- .addOnGesturePerformedListener(new MyOnGesturePerformedListener());
- // 创建首饰库对象GestureLibrary
- gLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);
- // 加载手势库资源
- loadState = gLibrary.load();
- }
- private final class MyOnGesturePerformedListener implements
- OnGesturePerformedListener {
- public void onGesturePerformed(GestureOverlayView overlay,
- Gesture gesture) {
- if (loadState) {//加载手势资源成功
- // 获取画的图形进行匹配,匹配程度就是Prediction中的score
- ArrayList<Prediction> predictions = gLibrary.recognize(gesture);
- if (!predictions.isEmpty()) {// 如果用户画了图形,就会匹配
- Prediction prediction = predictions.get(0);
- Log.i("TAG", String.valueOf(prediction.score));
- if (prediction.score > 5) {// 判断相似度大于1,与里面的两者进行匹配
- if ("close".equals(prediction.name)) {//关闭
- finish();
- } else if ("dialto".equals(prediction.name)) {//打电话
- Intent intent = new Intent(Intent.ACTION_CALL,
- Uri.parse("tel:11111111111"));
- startActivity(intent);
- }
- } else {// 相似度小于1,不识别
- showToast(R.string.noprediction);
- }
- } else {//没有画图形
- showToast(R.string.notrecognize);
- }
- } else {
- showToast(R.string.noloading);
- }
- }
- }
- private void showToast(int tesId) {
- Toast.makeText(this, tesId, Toast.LENGTH_LONG).show();
- }
- }
效果图:(必须画的比较精确)
如果画c形状的话,会退出这个程序
如果画一个对钩的话,会去进行拨号的操作
Android成长之路-手势识别的实现的更多相关文章
- Android成长之路-实现简单动画
实现简单动画: 在drawable目录中放入图片, 并且创建xml文件 frame.xml 存入图片,如下: <pre class="html" name="cod ...
- Android成长之路-编码实现软件界面
实现一个登陆界面: 相对布局: package cn.csdn.codeui; import android.app.Activity; import android.os.Bundle; impor ...
- Android成长之路-手势库的创建
手势库的创建: 使用SDK自带的例子GestureBuilder建立手势库,这个文件夹存在于android\android-sdk-windows \samples\android-10\Gest ...
- Android成长之路-LayoutInflater和inflate的用法
在这里用Tabhost的例子来说明: package cn.csdn.activity; import android.app.TabActivity; import android.os.Bundl ...
- Android成长之路-实现监听器的三种方法
第一种: 在Test类中 定义一个类接口OnClickListener 第二种:直接在Test类上写一个接口 其中的this相当于new OnClickListener()对象, 即class ...
- 【腾讯Bugly干货分享】JSPatch 成长之路
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/579efa7083355a9a57a1ac5b Dev Club 是一个交流移动 ...
- 阿里技术分享:阿里自研金融级数据库OceanBase的艰辛成长之路
本文原始内容由作者“阳振坤”整理发布于OceanBase技术公众号. 1.引言 OceanBase 是蚂蚁金服自研的分布式数据库,在其 9 年的发展历程里,从艰难上线到找不到业务场景濒临解散,最后在双 ...
- redis成长之路——(二)
redis操作封装 针对这些常用结构,StackExchange.Redis已经做了一些封装,不过在实际应用场景中还必须添加一些功能,例如重试等 所以对一些常功能做了一些自行封装SERedisOper ...
- redis成长之路——(一)
为什么使用redis Redis适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就 ...
随机推荐
- 解决Could not open input file: think问题
前几天做项目的时候,突然想用命令行创建TP5的控制器以及模型等 输入命令: >php think make:controller admin/Abc 报错如下: Could not open i ...
- Mosfet Bi-Directional Switch NMOS PMOS Back to Back
http://www.electronic-products-design.com/geek-area/electronics/mosfets/using-mosfets-as-general-swi ...
- GCC安装UBUNTU
在Ubuntu下安装GCC和其他一些Linux系统有点不一样. 方法一: 该方法超简单:sudo apt-get build-depgcc 就上面这条命令就可以搞定 方法二:sudo apt-get ...
- OpenERP实施记录(12):付款处理
本文是<OpenERP实施记录>系列文章的一部分. 1. 在前面的文章中,采购订单确认时自动生成了供应商发票,可以在 会计 > 供应商列表 > 供应商发票 查询,状态为&quo ...
- Source Insight 源代码查看工具
在开发的过程中,有时候我们需要研究源代码,查看源码是一个好的习惯,能帮我们学到很多的东西,比如JDK可以帮助我们理解很多设计模式在实际开发中的应用,又或者android开发者,源代码更是必不可少的,当 ...
- Python学习 —— 阶段综合练习二
综合之前的类的学习,做以下实例练习:(建议先不要看代码,自己先试着写:代码仅供参考,有多种实现方法) 1. Triangle & Equilateral 1). 创建class Triang ...
- ARM指令集—SWP指令
ARM指令集-SWP指令 SWP和SWPB是ARM指令集中对存储单元的原子操作.即对存储单元的一次读和一次不可被切割. SWP和SWPB分别完毕存储器和寄存器之间 一个字(32bit)和一个字节(8b ...
- JavaScript实现瀑布流
前端内容: 使用JavaScript和四个div,将照片放入四个div中 <!DOCTYPE html> <html lang="en"> <head ...
- RecyclerView.ItemDecoration 间隔线
内容已更新到:https://www.cnblogs.com/baiqiantao/p/19762fb101659e8f4c1cea53e7acb446.html 目录一个通用分割线ItemDecor ...
- 分别用Java和JS读取Properties文件内容
项目中经常用到的配置文件,除了XML文件之外,还会用到Properties文件来存储一些信息,例如国际化的设置.jdbc连接信息的配置等.有时候也会把一些路径或者sql语句放到Properties中, ...