手势识别控件GestureOverlayView的试用方法
首先在布局文件里添加GestureOverlayView
<android.gesture.GestureOverlayView android:id="@+id/gestures_overlay" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1.0" <!-- android:gestureStrokeType 手势是一笔构成或多笔 --> android:gestureStrokeType="multiple" > </android.gesture.GestureOverlayView>
这里需要注意控件名称不可以为GestureOverlayView,而是android.gesture.GestureOverlayView
然后添加手势
这里需要3个对象 分别是:
overlay是你的手势控件GestureOverlayView overlay = null; GestureLibrary library = null; Gesture gesture = null;
library用于存储手势
gesture是你画的手势
监听手势控件实现OnGestureListener接口重写:
保存手势 存到本地文件:@Override public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) { // TODO Auto-generated method stub } @Override public void onGesture(GestureOverlayView overlay, MotionEvent event) { // TODO Auto-generated method stub } @Override public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) { // TODO Auto-generated method stub //得到手势 gesture = overlay.getGesture(); } @Override public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) { // TODO Auto-generated method stub }
library = GestureLibraries.fromFile(libraryFile);
//给手势取名 library.addGesture(gestureName, gesture); library.save();
查看你添加的手势:
GestureLibrary library = GestureLibraries .fromFile(gestureFiles); if (library.load()) { for (String name : library.getGestureEntries()) { for (Gesture gesture : library.getGestures(name)) { final Bitmap bitmap = gesture.toBitmap( borderLength, borderLength, mThumbnailInset, mPathColor); } } }
使用手势在另一个界面在添加一个手势控件并添加手势触发事件
第一次发博客 以前做的很多东西都忘了每次用的时候都要上网找 所以在此记录 以后养成一种习惯overlay.addOnGesturePerformedListener(new OnGesturePerformedListener() { @Override public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { // TODO Auto-generated method stub List<Prediction> predictions = new ArrayList<Prediction>(); File gestureFile = new File(AppData.GESTURE_PATH); File[] gestureFiles = gestureFile.listFiles(); for (int i = 0; i < gestureFiles.length; i++) { library = GestureLibraries.fromFile(gestureFiles[i]); if (library.load()) { List<Prediction> list = library.recognize(gesture); for (Prediction prediction : list) { predictions.add(prediction); } } } double maxScore = predictions.get(0).score; String maxName = predictions.get(0).name; for (Prediction prediction : predictions) { if (maxScore < prediction.score) { maxScore = prediction.score; maxName = prediction.name; } } if (maxScore > 2) { execute(maxName); } else { // Toast.makeText(context, "未找到相应的手势", // Toast.LENGTH_LONG).show(); } } });