Android 手势识别控件 GestureOverlayView

手势识别控件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个对象  分别是:

GestureOverlayView overlay = null;
GestureLibrary library = null;
Gesture gesture = null;
overlay是你的手势控件

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();
				}

			}
		});
第一次发博客 以前做的很多东西都忘了每次用的时候都要上网找  所以在此记录  以后养成一种习惯



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值