手势识别

来源:互联网 发布:javascript 矩阵库 编辑:程序博客网 时间:2024/05/07 14:34

手势识别原理
1.手指触摸屏幕那一刹那 会触发MotionEvent事件
2.被onTouchListener监听 在onTouch()中获得MotionEvent
3.GestureDetector(手势识别器) 可以将MotionEvent对象转交给OnGestureListener接口
4.在OnGestureListener接口中可以获取到MotionEvent事件。
9.2
MotionEvent 主要用于封装手势 触摸笔 轨迹球 等动作事件 内部记录横轴和纵轴坐标
GestureDetetor 用来识别各种手势
OnGestureListener:手势交互接口
GestureDetetor(手势识别器)工作原理:
当接收到用户触摸消息时 将消息给手势识别器进行加工处理 我们只需要监听GestureDetetor处理后手势即可
GestureDetector.OnDoubleTapListener//处理双击消息
new GestureDetector.OnDoubleTapListener(){
//单击确认
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
return false;
}
//双击
@Override
public boolean onDoubleTap(MotionEvent e) {
return false;
}
//双击按下和抬起各一次
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return false;
}
};
GestureDetector.OnGestureListener//处理单击消息
9.4 代码 在imageview左右滑动
//设置onTouchListener()实现ontouch()在onTouch()中进行MotionEvent事件转发
//捕获触摸屏幕发生的事件
@Override
public boolean onTouch(View v, MotionEvent event) {
gestureDetector.onTouchEvent(event);//转发MotionEvent
return true;
}
//初始化GestureDetector(手势处理器) 需要传入一个
OnGestureListener接口
gestureDetector=new GestureDetector(new MyGestor());
//创建一个类继承自SimpleOnGestureListener(这个类已经继承了处理单击、双击接口)在这个类中进行手势滑动操作
class MyGestor extends GestureDetector.SimpleOnGestureListener {
@Override//滑动 e1 开始事件 e2 结束事件 但是这个有些不精确
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (e1.getX() - e2.getX() > 50) {
Toast.makeText(MainActivity.this, “从右往左移动”, Toast.LENGTH_SHORT).show();
} else if (e2.getX() - e1.getX() > 50) {
Toast.makeText(MainActivity.this, “从走往右移动”, Toast.LENGTH_SHORT).show();
}
return super.onFling(e1, e2, velocityX, velocityY);
}
}
9.5GestureOverlayView(android提供的控件)继承自帧布局
要将手势库加入到raw文件夹下面 也就是说手势库是固定的  只能比对手势库中存在的手势
android.gesture.GestureOverlayView在布局中要写全类名否则不显示
包裹控件情况下控件大小不是控件决定的 而是由GestureOverlayView决定的
一种用于手势输入的透明覆盖层 也可以覆盖在其他控件上方 也可以包裹控件,有三个监听接口
GestureOverlayView.OnGestureListener 手势监听器
GestureOverlayView.OnGesturePerformedListener 手势执行监听器
GestureOverlayView.OnGesturingListener 手势执行中监听器
//找到手势文件
//找到手势文件中所有手势
//匹配识别
final GestureLibrary gestureLibrary = GestureLibraries.fromRawResource(MainActivity.this, R.raw.gestures);
gestureLibrary.load();
gestureDetector.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {
@Override
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
//读取手势库中手势
ArrayList recognize = gestureLibrary.recognize(gesture);//所有手势
Prediction prediction = recognize.get(0);
if (prediction.score >= 5.0) {//手势相似度
if (prediction.name.equals(“12345”)) {

                    Toast.makeText(MainActivity.this, "没有该手势fdsfds", Toast.LENGTH_SHORT).show();                }            } else {                Toast.makeText(MainActivity.this, "没有该手势", Toast.LENGTH_SHORT).show();            }        }    });
0 0