Android 手势识别的实现方法
2013-01-24 09:55
369 查看
手势识别系统:先把手势库放到项目中:(创建手势库见下一篇博客)在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形状的话,会退出这个程序
如果画一个对钩的话,会去进行拨号的操作
<?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游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- Android开发实现多点手势识别
- HOG + SVM 实现静态手势识别 (基于Android平台实现)
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- 实现在Android 多点手势识别
- 16—【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- 【Android界面实现】使用GestureOverlayView控件实现手势识别
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- android实现图片识别的几种方法
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- android学习笔记---47-android_手势识别技术的实现,手势库的创建
- Android技术——视图切换(四)“ViewSwitcher+手势识别”实现视图的滑动切换
- 基于Android中手势交互的实现方法
- Android ScrollView滚动 手势识别,实现条目悬浮,返回顶部
- Android编程实现自定义手势的方法详解
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- 札记:android手势识别功能实现(利用MotionEvent)
- Android成长之路-手势识别的实现