这里介绍的只是一个简单的DEMO,根据官方的API还可以进行自定义手势的编写,具体的内容就以后遇到了再说,在本项目中也只起一个开后门的验证作用,毕竟一个没有后门的APP不是一个好APP。

画手势图:GestureOverlayView
画的时候存在几种状态,可利用GestureDetector中的类进行监听
1.onDown : 触碰
2.onFling:拖动
3.onLongPress:长按
4.onScroll:滚动
5.onSHowPress:按下,未移动未松动时
6.onSingleTagUp:轻击

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 获取手势编辑视图
gestureOverlayView = (GestureOverlayView) findViewById(R.id.gestureOverlayView);

// 设置手势绘图的颜色
gestureOverlayView.setGestureColor(Color.RED);

// 设置手势的绘制宽度
gestureOverlayView.setGestureStrokeWidth(10);

// 为gesture的手势完成事件绑定事件监听器
gestureOverlayView.addOnGesturePerformedListener new GestureOverlayView.OnGesturePerformedListener() {
@Override
public void onGesturePerformed(GestureOverlayView overlay, final Gesture gesture) {
// 根据Gesture包含的手势创建一个位图
Bitmap bitmap = gesture.toBitmap(128, 128, 10, 0xffff0000);
imageView.setImageBitmap(bitmap);

// 获取制定文件对应的手势库
GestureLibrary guestureLibrary = GestureLibraries.fromFile(Environment
.getExternalStorageDirectory().getPath() + "/mygestures");

// 添加手势
guestureLibrary.addGesture(gestureEditText.getText().toString(), gesture);
guestureLibrary.save();
});

读取:
读取和写入的时候都会用到一个GestureLibrary手势库,这个库提供了一个方法,gestureLibrariLibrary.recognize(gesture)这个方法可以获得泛型Prediction的结果,Prediction中包含两个属性,一个是手势图的名称,一个是当前你所绘制的手势与目标手势图的相似度,我们可以通过比较它们之间的相似度来实现我们的逻辑运算。
同样的,我们也需要为它们定义一个监听器,这个监听器也会在手势完成也就是手指抬起来的时候触发。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 定义手势编辑组件绑定监听器
gestureOverlayView.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {

@Override
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
// 识别用户刚刚所绘制的手势
ArrayList<Prediction> predictions = gestureLibrariLibrary.recognize(gesture);

// 遍历所有找到的Prediction对象
for (Prediction prediction : predictions) {
if (prediction.name.equals("test2")){
// 只有相似度大于6的手势才会被输出
if (prediction.score > 6) {

}
}
}
}
});