源码下载 地址
最近几天在研究 android 中的手势识别 这篇文件记录学习过程。
重要的类
测试手势是否添加成功
super.onCreate(savedInstanceState);
setContentView(R.layout.gesture_perform);
// 手势画板
GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures_overlay);
gestures.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE);//多笔
gestures.setFadeOffset(2000); // 多笔画每两次的间隔时间
gestures.setGestureColor(Color.CYAN);// 画笔颜色
gestures.setGestureStrokeWidth(6);// 画笔粗细值
// 手势识别的监听器
gestures.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {
@Override
public void onGesturePerformed(GestureOverlayView overlay,Gesture gesture) {
// 从手势库中查询匹配的内容,匹配的结果可能包括多个相似的结果,匹配度高的结果放在最前面
ArrayList<Prediction> predictions = mGestureLib.recognize(gesture);
if (predictions.size() > 0) {
Prediction prediction = (Prediction) predictions.get(0);
// 匹配的手势
if (prediction.score > 1.0) { // 越匹配score的值越大,最大为10
Toast.makeText(GesturePerformedActivity.this,prediction.name, Toast.LENGTH_SHORT).show();
}
}
}
});
if (mGestureLib == null) {
mGestureLib = GestureLibraries.fromFile(mStoreFile);
mGestureLib.load();
}
添加手势
setContentView(R.layout.add_gesture);
initFindByID();
gestureOverlayView.setFadeOffset(2000);
gestureOverlayView.setGestureColor(Color.YELLOW);
gestureOverlayView.setGestureStrokeWidth(6);
gestureOverlayView
.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE);
gestureOverlayView
.addOnGestureListener(new GestureOverlayView.OnGestureListener() {
@Override
public void onGestureStarted(GestureOverlayView overlay,
MotionEvent event) {
gesture = null;
}
@Override
public void onGestureEnded(GestureOverlayView overlay,
MotionEvent event) {
gesture = overlay.getGesture();
if (gesture.getLength() < 120f) {
overlay.clear(false);
}
}
@Override
public void onGestureCancelled(GestureOverlayView overlay,
MotionEvent event) {
}
@Override
public void onGesture(GestureOverlayView overlay,
MotionEvent event) {
}
});
addbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(edittext.getText().toString())) {
edittext.setError("请输入名字");
return;
}
GestureLibrary gestureLibraries = MainActivity
.getGestureLibrary();
gestureLibraries.addGesture(edittext.getText()+ "", gesture);// 1419304917563
boolean b = gestureLibraries.save();
if (b) {
Toast.makeText(Add_Gesture.this, "成功" + gesture.getID(), 1)
.show();
finish();
} else {
Toast.makeText(Add_Gesture.this,
"失败" + gesture.getID() + "", 1).show();
}
}
});
quxiaobutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
private void initFindByID() {
edittext = (EditText) findViewById(R.id.edittext);
addbutton = (Button) findViewById(R.id.addbutton);
quxiaobutton = (Button) findViewById(R.id.quxiaobutton);
gestureOverlayView = (GestureOverlayView) findViewById(R.id.gesture);
}
具体请下载源码。