这里给出一个手势识别的简单Demo.
第一步,建立手势库。
使用SDK自带例子GestureBuilder建立手势库(位置:android-sdk-windows\samples\android-8\GestureBuilder)。使用GestureBuilder之前,你需要恢复其到开 发环境,然后进行编绎并部署到手机上。此时,就可以使用GestureBuilder建立手势库,生成的手势库文件在SCDard上,默认文件名称为:gestures
第二步,应用中加载手势库文件,然后开发手势识别代码。
把手势库文件拷贝到项目的res/raw目录下,然后在布局文件中加入用于手势绘制的view.
<android.gesture.GestureOverlayView
android:id="@+id/gestures"
android:layout_width="fill_parent“ android:layout_height="0dip"
android:layout_weight="1.0"
/>
大多数情况下,手势都是通过一笔完成。然而有一些特别的需求就需要通过多个笔画来实现,这时可以使用gestureStrokeType属性进行设置:Multiple:1
下面就上代码了。
首先把利用GestureBuilder工程生成的手势库文件导入到我们的工程,位置如下图。
这个是我加入的手势,如下
布局文件的代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<android.gesture.GestureOverlayView
android:id="@+id/gestures_overlay"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1.0"
android:gestureStrokeType="multiple" /> // 一般情况下 ,手势是通过一笔完成的,但是如果我们需要通过多笔来完成一个手势的时候,我们// 需要设置这个属性。
</LinearLayout>
package com.test.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.Prediction;
import android.gesture.GestureOverlayView.OnGesturePerformedListener;
import android.net.Uri;
import android.os.Bundle;public class MainActivity extends Activity {
private GestureLibrary library = null;
private boolean success;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//获得可以画手势的控件
GestureOverlayView gestureView = (GestureOverlayView) this.findViewById(R.id.gestures_overlay);
gestureView.addOnGesturePerformedListener(new GestureListener());//加载手势库 ,该手势库是通过android自带的程序创建的。
library = GestureLibraries.fromRawResource(this, R.raw.gestures);
//判断加载是否成功
success = library.load();
}
private final class GestureListener implements OnGesturePerformedListener {
@Override
public void onGesturePerformed(GestureOverlayView overlay,
Gesture gesture) {
if(success){
从手势库中查找匹配的手势,最匹配的放在最前面。
ArrayList<Prediction> predictions = library.recognize(gesture);
if(!predictions.isEmpty()){如果手势库中有相似的手势存在,我们就要得到第一个元素来进行处理。
我们在处理该元素的时候,可以通过匹配度进行判断,匹配度是一个0—10之间的数字。0是匹配度最低,10是匹配度最高。
Prediction prediction = predictions.get(0);
if (prediction.score>3){// 我们如果在GestureOverlayView 画了一个匹配度大约3的 对号。 该应用程序就会被关掉。
if("agree".equals(prediction.name)){
android.os.Process.killProcess(android.os.Process.myPid());
}else if("call".equals(prediction.name)){
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:5556"));
startActivity(intent);
}
}
}
}
}
}
}
android之手势识别
最新推荐文章于 2024-05-02 22:25:28 发布