收藏 分享(赏)

手势识别.doc

上传人:sjmd695 文档编号:7598755 上传时间:2019-05-21 格式:DOC 页数:6 大小:37KB
下载 相关 举报
手势识别.doc_第1页
第1页 / 共6页
手势识别.doc_第2页
第2页 / 共6页
手势识别.doc_第3页
第3页 / 共6页
手势识别.doc_第4页
第4页 / 共6页
手势识别.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、 Android+手势识别详解分类: android 经验与实例 2011-03-31 23:26 1314 人阅读 评论(2) 收藏 举报今天就来把以前的学习文章与经验简单总结中出来吧,在这里我就直接把代码贴下来了, 希望能给初学者做最佳的学习参考,也希望有更多的开发人员来加入 ANDROID 开发团队,参与更多的创新方式的开发,好了 ,今天我就简单的讲解一个关于手势识别的最基础也是最需要去掌握的一个技术节点,因为他能给我们在开发中可能获得最新的用户体验效果, 如利用手势识别,你只需要简单的一个手势操作就可能去完成你想要完成的某件可能比较复杂的事情,如通过一个手势来实现打电话 ,而并不需要去

2、找你所需要的电话号码这个比较麻烦的过程了,如你可以通过一个手势识别直接来登录到某个你事先设置好的一个应用, 或者登录到某个网站,设置是去实现你想要对某个应用做出某些动作的操作响应, 然而我们要做到这些都不能忽视我们首先需要做的是你必须首先得完成一个最简单的手势操作,世界上莫过于学习程序最难的就是写第一个 Hello,World!程序并打印出来,当然如果你那样做到了, 那也才是对其刚刚开始的节奏,再下来我们还得加倍去学习并完全知道它为什么会实现这样的效果,出了能完成这些最基本的操作还有别的吗,是不是可以在此基础上加些额外的思考呢,OK,为了达到这个目的,我们先来完成一个最基本的手势识别吧 ,主要

3、实现的功能有通过一个手势来实现拨打指定某个人的电话与再通过一个手势来实现退出的功能,在这里我就结合 SDK下的一个手势案例直接来操作实现的过程,创建手势库的过程, 自己去看 D:/toolss/android-sdk-windows/samples/android-8/GestureBuilder 这个手势案例吧,好了,我先使用 SDK 下的GestureBuilder 来生成两个手势放于库/mnt/sdcard/LOST.DIR/gestures 文件下,然后我们把 gestures 文件拷贝到新建项目下一个新建的:/res/raw/gestures 下, 然后在 main.xml 文件中设

4、置如下其配置支字符参数为 strings.xml:Hello World, MainActivity!手势识别 2不能识别该手势手势识别百分率太低, 请重新输入src 下的源代码为:package com.jsd.gesture;import java.util.ArrayList;import android.app.Activity;import android.content.Intent;import android.gesture.Gesture;import android.gesture.GestureLibraries;import android.gesture.Gestur

5、eLibrary;import android.gesture.GestureOverlayView;import android.gesture.Prediction;import android.gesture.GestureOverlayView.OnGesturePerformedListener;import .Uri;import android.os.Bundle;import android.widget.Toast;public class MainActivity extends Activity private GestureLibrary libraray;/* Cal

6、led when the activity is first created. */Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.main);libraray = GestureLibraries.fromRawResource(this, R.raw.gestures);/加载手势库对象libraray.load();/加载手势库GestureOverlayView overlayView = (Gesture

7、OverlayView)this.findViewById(R.id.gestures);overlayView.addOnGesturePerformedListener(new GestureListener();private final class GestureListener implements OnGesturePerformedListenerOverridepublic void onGesturePerformed(GestureOverlayView overlay,Gesture gesture) / TODO Auto-generated method stubAr

8、rayList predictions = libraray.recognize(gesture);/识别用户输入的手势是否存在手势库中if(!predictions.isEmpty()Prediction prediction = predictions.get(0);/得到匹配的手势if(prediction.score 3)if(“close“.equals(prediction.name)/关闭应用finish();else if(“phone“.equals(prediction.name)/指定某个人打电话Intent intent = new Intent(Intent.ACTI

9、ON_CALL,Uri.parse(“tel:18601159149“);startActivity(intent);elseToast.makeText(MainActivity.this, R.string.nopediction, 1).show();elseToast.makeText(MainActivity.this, R.string.norecohnize, 1).show();/* 在这个方法中来调用其关闭* 关闭应用的方法有三种:* 1.获取其进程 ID 来杀死该进程: 推介使用:android.process.killProcess(android.os.Process

10、myPid();* 2.终止正在运行的 JAVA 虚拟机,从而导致程序终止:System.exist(0);* 3.强制关闭与该报有关的一切执行:AcitvityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);manager.restartPackage(getPackageName();*/private void onDstroy() / TODO Auto-generated method stuandroid.os.Process.killProcess(android.os.P

11、rocess.myPid();/当 ACTIVITY 被摧毁的时候我们就把应用给杀死以上就这个应用的所有代码,当然如果有对代码不太理解的话, 请下载源代码,上面是我直接粘贴的,那就把下面自己按思路写的代码与注释一起粘贴下来吧, 希望初学者也能根据自己的思路去写出自己的注释效果与理解收获:手势识别:1.什么是手势识别技术:如一个人使用一个手指在屏幕上画上某些符号来代表的说需要操作的某项业务,如画个圈代表向某个人打电话等.2.建立手势哭:类似于数据库,即一些手势符号的数据存储.看一个例子:sdk/samples/android-8/GestureBuilder,建立好的手势库会存在 SD 卡上面,

12、默认的文件名称为 :gestures.3.根据用户输入的手势后进行判断, 如果其数据库存在相应的手势就返回出来,4.在 res 下面新建一个专门用来存放静态文件的目录 raw,把手势库文件拷贝其目录文件下,当然它也会在 gen 目录下的 R 类中生成关于该文件的一个常量引用5.然后在 main.xml 中写入:通过以上的控件,用户就会通过手指在手机上画对应符号出来, 然后就需要在代码进行引用了:GestureOverlayViewoverlayView = (GestureOverlayView)this.findViewById(R.id.gestures);6.添加一个手势绘制完之后的监听

13、事件:overlayView.addOnGesturePerformedListener(new GestureListener();7.提供一个类来对手势监听实现接口:private final class GestureListener implementsOnGesturePerformedListener/当用户画完之后就会给用户一个参数传入其方法public void onGesturePerformed(GestureOverlayView overlay,Gesture gesture)/实现接口的方法/下面就需要判断手势是否存在数据库中与其精度是否达到要求,这时需要加载手势库这

14、个类:ArrayList prediction = libraray.recognize(gesture);/识别用户输入的手势是否存在手势库中,并返回所有跟这个手势相似的手势 ,并且它会把相似度最高的手势放在最前面 ,也就是说在这个机会中的第一个元素相似度是最高的,现在只需要相似度最高的手势即可:if(!predictions.isEmpty()Prediction prediction = predictions.get(0);/得到最匹配的手势if(prediction.score)/判断相似度:010 40%即可if(“close“.equals(prediction.name)/关闭

15、应用:1.首先获取当前进程 ID,然后杀死该进程( 建议使用):android.Process.killProcess(android.os.Process myPid();2.终止当前正在运行的 Java虚拟机,导致程序终止:System.exit(0);3.强制关闭与该包有关联的一切执行:ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);manager.restartPackage(getPackageName();这里需要注意,我们不能在这里直接使用这三种方法中的一种

16、,如果这样的话 ACTIVITY 的 ONDESTORY()方法就无法调用以至于无法正常关闭,但是我们可以在这里点调用 finish()方法来让其 ACTIVITY 先正常关闭, 然后在触发 ONDESTORY()里进行调用else if(“phone“.equals(prediction.name)/指定一个人打电话elseToast.makeText(MainActivity.this,R.string/nopediction,1).show;elseToast.makeText(MainActivity.this,R.string.norecognize,1).show;问题:大多数手势都是一笔完成 ,然而需求可能需要两笔或者以上来完成 ,这时可以使用gestureStrokeType 属性进行设置:android:gestureStrokeType=“multiple“

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报