1 xml文件
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:tools="http://schemas.android.com/tools"
4 android:layout_width="match_parent"
5 android:orientation="vertical"
6 android:layout_height="match_parent"
7 tools:context=".MainActivity" >
8 <android.gesture.GestureOverlayView
9 android:id="@+id/gestureOverlayView1"
10 android:layout_width="match_parent"
11 android:layout_height="0dp"
12 android:layout_weight="1"
13 android:gestureStrokeType="multiple" >
14 </android.gesture.GestureOverlayView>
15 <Button
16 android:layout_height="wrap_content"
17 android:layout_width="wrap_content"
18 android:layout_gravity="center_horizontal"
19 android:id="@+id/Button"
20 android:layout_weight="0"
21 android:text="识别"/>
22 </LinearLayout>
23
24 注意:
25 android_weight=0 表示是首先计算该控件的的高度或宽度,然后计算android_weight="1"控件的 高度,一般他是和 android:layout_height="0dp"结合使用的,否则是不会出来效果
26
27
28
29 public class MainActivity extends Activity {
30 private GestureLibrary library;
31 private Gesture gestures;
32 protected void onCreate(Bundle savedInstanceState) {
33 super.onCreate(savedInstanceState);
34 setContentView(R.layout.main);
35 GestureOverlayView gesture=(GestureOverlayView) this.findViewById(R.id.gestureOverlayView1);
36 library=GestureLibraries.fromRawResource(this, R.raw.gestures);//得到手势文件的类文件
37 library.load();//加载手势库
38
39 /**
40 * 为手势添加事件监听
41 */
42 gesture.addOnGestureListener(new OnGestureListener(){
43 public void onGesture(GestureOverlayView overlay, MotionEvent event)
44 {
45 // TODO Auto-generated method stub
46 }
47 @Override
48 public void onGestureCancelled(GestureOverlayView overlay,MotionEvent event)
49 {
50 // TODO Auto-generated method stub
51 }
52 @Override
53 public void onGestureEnded(GestureOverlayView overlay,MotionEvent event)
54 {
55 gestures=overlay.getGesture();//得到一个手势
56 }
57 @Override
58 public void onGestureStarted(GestureOverlayView overlay,MotionEvent event)
59 {
60 // TODO Auto-generated method stub
61 }
62 });
63
64 this.findViewById(R.id.Button).setOnClickListener(new OnClickListener()
65 {
66 public void onClick(View v)
67 {
68 find(gestures);
69 }
70 });
71 }
72
73 public void find(Gesture gesture)
74 {
75 ArrayList<Prediction> predictions=library.recognize(gesture);//得到手势库中的一个集合
76 if(predictions!=null)
77 {
78 Prediction prediction= predictions.get(0);//得到一个最匹配的一项,手势匹配默认会把最匹配的一项放在最前面
79 /**
80 * 判断匹配的度数是否大于60%,prediction.score的值在大于0小于10的,如果是4的话就是匹配值是40%的意思
81 */
82 if(prediction.score>5)
83 {
84 if("close".equals(prediction.name))
85 {
86 finish();//此方法只能那个关闭Activity,并不能杀死进程,所以要在OnDestory()方法中杀死进程
87 }
88 else if("call".equals(prediction.name))
89 {
90 Intent intent=new Intent(Intent.ACTION_CALL,Uri.parse("tel:15824935047"));
91 startActivity(intent);
92 }
93 }
94 else
95 {
96 Toast.makeText(this, "匹配值太低", Toast.LENGTH_LONG).show();
97 }
98 }else
99 {
100 Toast.makeText(this, "匹配不成功", Toast.LENGTH_LONG).show();
101 }
102 }
103
104 @Override
105 protected void onDestroy() {
106 Process.killProcess(Process.myPid());//杀死当前进程
107 super.onDestroy();
108 }
109
110 @Override
111 public boolean onCreateOptionsMenu(Menu menu) {
112 // Inflate the menu; this adds items to the action bar if it is present.
113 getMenuInflater().inflate(R.menu.main, menu);
114 return true;
115 }
116
117 }