本节将介绍Android中非常炫酷的功能:手势识别
首先,我们将用SDK自带的项目建立一个手势库,这个开源项目可以在samples中的文件夹中找到,名为“GestureBuilder”,将其导入Eclipse中,然后运行在虚拟的手机上如下图
图 1
图 2
添加一个名称为call的手势,之后就可以关闭这个应用了,然后在虚拟手机的虚拟SD卡根目录下就可以找到一个名为”gestures”的文件,这个便是刚才建立的手势库文件了,下面将围绕这个手势库进行应用的开发,以拨打电话为例,比如用户只要在屏幕上做出与该手势相近的手势,便可以拨打指定号码
图 3
界面其实很简单,主体是一个可以画手势的控件
<android.gesture.GestureOverlayView
android:id="@+id/gesture"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1.0"
android:gestureStrokeType="multiple" />//表示可以多次画手势
在主Activity创建的时候,加载手势库
File gestureFile = new File(Environment.getExternalStorageDirectory(),"gestures");//创建手势库文件
//找到手势库
library = GestureLibraries.fromFile(gestureFile.getAbsolutePath());
//加载手势库
success = library.load();
//给手势控件加载监听对象
gestureOverlayView.addOnGesturePerformedListener(new GestureListener());
监听对象是自己创建的,继承自OnGesturePerformedListener
private final class GestureListener implements OnGesturePerformedListener{
@Override
public void onGesturePerformed(GestureOverlayView overlay,
Gesture gesture) {
if(!success)return;//如果手势库还没创建,什么也不做
ArrayList<Prediction> predictions = library.recognize(gesture);//从手势库中找到与用户手势匹配的集合
if(predictions.size()>0){//如果有匹配的手势集合
Prediction prediction= predictions.get(0);
Log.i("MainActivity", "" + prediction.score);
if(prediction.score>3){//匹配程度从1到10
if(prediction.name.equals("s")){
Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:5556"));
startActivity(intent);
}else if(prediction.name.equals("q")){
android.os.Process.killProcess(android.os.Process.myPid());//杀死当前进程
}
}
}
}
}
至此,Android手机的手势识别功能介绍完毕。