手势识别在安卓开发里虽然用到的场景不是很多,但有时候还是能让你的产品更方便,更有趣味。比如登陆时不用每次重复输入密码,只需九宫格手势解锁,就像支付宝客户端那样。下面我们完成一个简单的手势识别开发。
我们首先需要一个描述手势动作的文件,在模拟器里预装一个叫GesturesBuilder的程序,这个程序就是让你创建自己的手势的(GesturesBuilder的源代码在sdk问samples里面有,有兴趣可以看看)。创建的手势将被保存到/sdcard/gestures里面。
建立好自己的手势库后,我们就可以实现手势识别了,新建一个工程,把上面的手势库文件复制到你的工程/res/raw下,你就可以在你的工程里面使用这些手势了。复制到/res/raw下的手势是只读的,也就是说你不能修改或增加手势了。
布局xml文件大概如下:
<android.gesture.GestureOverlayView
android:id="@+id/gestures"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gestureStrokeType="multiple"
/>
<Button
android:layout_weight="0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/recognize"
android:onClick="find"
/>
MainActivity里主要代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
library = GestureLibraries.fromRawResource(this, R.raw.gestures);
library.load();
overlayView = (GestureOverlayView) this.findViewById(R.id.gestures);
//只针对单笔手势:overlayView.addOnGesturePerformedListener(new GesturePerformedListener());
overlayView.addOnGestureListener(new GestureListener());
}
public void find(View v){
recognize(mgesture);
overlayView.clear(true);
}
private final class GestureListener implements OnGestureListener{
public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) {
}
public void onGesture(GestureOverlayView overlay, MotionEvent event) {
}
public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {
mgesture = overlay.getGesture();
}
public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) {
}
}
private final class GesturePerformedListener implements OnGesturePerformedListener{
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
recognize(gesture);
}
}
private void recognize(Gesture gesture) {
ArrayList<Prediction> predictions = library.recognize(gesture);
if(!predictions.isEmpty()){
Prediction prediction = predictions.get(0);
//6表示60%相似
if(prediction.score >= 6){
//call和close是我们在建立手势库时给手势取得名字
if("call".equals(prediction.name)){
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:1350505050"));
startActivity(intent);
}else if("close".equals(prediction.name)){
finish();//关闭Activity
}
}else{
Toast.makeText(getApplicationContext(), R.string.low, 1).show();
}
}else{
Toast.makeText(getApplicationContext(), R.string.notfind, 1).show();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
android.os.Process.killProcess(android.os.Process.myPid());//关闭应用
}
大家看得出来,我这里定义了两个手势动作,当手势形如手势库中call时,就拨打电话,当手势形如手势库中close时,就退出程序。ok,手势识别开发就这么简单,我们可以再这基础之上做一些复杂的,比如实现手势解锁。思想很简单,我们可以修改下GesturesBuilder的源代码放入自己的工程,用户自己定义好手势动作后将其保存在手势库中,这样用户就可以用手势验证了。
分享到:
相关推荐
安卓 android 复杂 手势识别,不是左右滑动,而是识别复杂的手势,像es管理器 用户自定义手势识别:http://download.csdn.net/detail/u013506037/7898755 我的博客首页...
android 手势识别 demo
android 手势识别学习 更多,更详细的内容去我的博客喔 51cto ma_haile
利用Android开发中的JNI接口,导入OpenCV库进行手势识别,所使用的图片全部从Android的camera中进行采集,手势需要带上红手套,程序识别红色的方块物体,能够识别出1,2,3。。。的数字。
本源码是为本博客文章:ANDROID手势识别详解的代码参考,只是当你对读文章是看代码不怎么好看或者想对比运行效果的话,就下载去自己再慢慢研究吧....有问题请留言
android对自己创建出来的手势库进行识别,初学者适用
Android的一款手势识别软件 可运行 有注释 简单易懂
Android触摸屏手势识别,Android触摸屏手势识别,Android触摸屏手势识别
android手势识别两个对勾手势 OnGestureListener手势识别 可用于加载手势库
Android开发安卓大作业人脸识别签到系统源码Android开发安卓大作业人脸识别签到系统源码Android开发安卓大作业人脸识别签到系统源码Android开发安卓大作业人脸识别签到系统源码Android开发安卓大作业人脸识别签到...
安卓 android 用户自定义手势 手势识别, 资源是下载别人的,版权归原作者所有
android触屏手势识别
实现手势识别,有源码,有效果可看。 自己之前不明白,在学习过程中,逐渐弄清楚的,也就是在写这些源码的过程中逐渐弄清楚的。这些源码都是学习的过程,希望对你们有帮助。
Android手势识别实例 仅用于手机输入法,Himi提示:手势超过9个我做了删除所有手势的操作,为了界面整洁一些!输入法手势练习~(*^__^*)~ 嘻嘻! 操作介绍:1.(画手势我设置必须画两笔划才行哦~)添加手势:先...
一个基于卷积神经网络的数字手势识别APP(安卓),主要功能为:通过手机摄像头识别做出的数字手势,能够识别数字0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 对应的手势。
想要在安卓开发上面运用手势识别技术真的有点难的,但是看看列子真的很有效果,这里给大家一个经典的手势识别例子,希望对大家有用,绝对真实的源代码和例子!
Android 播放器 手势识别 音乐 画面很漂亮
Android手势识别的实现附上源代码,在屏幕上方划动手指,即可实现手机的响应,执行相应的操作,比如滑动、切换屏幕、图片放大、打开应用程序等,自动判断手势相似度,比较基础的安卓手势操作例子。