手势已经不是什么新鲜事物了
关于手势在android上面的应用,我想大概有这么两种
1.用户画完一个手势,然后系统识别
2.用户的动作没有完成,边画边识别
比如:我想定义一个操作,画一个M,然后系统打开music应用,这就是情况1
在list页面中,用户不断拨动list,页面跟随滚动,这是情况2
这里先总结一下情况17
==增加+获取=====================================================
用户需要在页面上加入组件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="multiple" />
这个组件是用来接收手势用的,有了它,你就可以在屏幕上面乱画了
我们需要给他设置监听事件
GestureOverlayView gestureOverlayView = (GestureOverlayView) findViewById(R.id.gestures_overlay);
gestureOverlayView.addOnGestureListener(new GestureOverlayView.OnGestureListener() {
public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) {}
public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {}
public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) {}
public void onGesture(GestureOverlayView overlay, MotionEvent event) {}
});
上面匿名类的四个函数作用显而易见
用户输入的手势对象如何得到呢
mGesture = gestureOverlayView.getGesture();
如果你觉得用户手势太短了,影响判断,那么可以在onGestureEnded时候做一些处理
比如:
if (mGesture.getLength() < LENGTH_THRESHOLD) {
gestureOverlayView.clear(false);//清除掉用户手势
mGesture = null;
//有些东西太短了是不行的...
}else{
//这样就可以了
}
xml里面写了一个属性android:gestureStrokeType="multiple"
这里可以设置single和multiple
如果你只需要识别一笔,那么single就可以了,如果不确定,那么设置成multiple
"二",就需要两笔才能画出
gesture.getStrokesCount()能得到手势的笔数
(ps:ArrayList<GestureStroke> gestureStrokeList = gesture.getStrokes();也能得到每一笔的信息)
用户画好了手势,如何保存呢
很不幸,手势不是保存到数据库中的,也不能直接保存到数据库中,它是以文件的形式存在的
GestureLibrary gestureLibrary;
Library,是的,文件是一个手势库,也就是说,一个文件对应多个手势
获得这个Library
gestureLibrary = GestureLibraries.fromFile(path);
然后保存到这个Library
gestureLibrary.addGesture(mName, mGesture);
gestureLibrary.save();
增删改查的增加已经结束了
==查询=======================================================
下面看看如何查询
mGestureLibrary.getGestures(entryName)
很不幸,它返回一个ArrayList<Gesture>,这也就意味着一个name对应多个Gesture
如果要获得库中所有手势,貌似只能这样
final Set<String> entries = mGestureLibrary.getGestureEntries();
先获得所有名字,然后再获得每个名字对应的所有手势
但是大多数时候我们并不关心这些
我们更关心的是,如果用户做了个手势,我想知道在库中有没有和这个手势相似的,有多相似!
ArrayList<Prediction> predictions = gestureLibrary.recognize(gesture);
返回的是精确度的list
Prediction里面只有两个属性,name和score
score越大,那么就与recognize的手势越接近
==修改+删除=====================================================
如果要对手势修改(貌似也没什么可改的),比如改个名字吧,那么只能先删除,再添加了
gestureLibrary.removeGesture(oldOne, oldGesture);
gestureLibrary.addGesture(newOne, newGesture);
gestureLibrary.save();
最后别忘记save
分享到:
相关推荐
android-ultrasound-gesture 该项目的目标是通过应用快速傅立叶变换和机器学习(SVM)仅使用超声来识别各种手势,并在识别移动设备中的手势时达到较高的准确度,最终,我们的目标是能够识别4种手势(通过将其作为...
android 源码学习
gesture-imageview.zip项目安卓应用源码下载gesture-imageview.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
Android 应用开发源码 参考与学习使用
Pro Android学习系列中的Touch Screen小例子。具体见http://blog.csdn.net/flowingflying/article/details/6212512
, 《Android开发艺术探索》侧重于Android知识的体系化和系统工作机制的分析,通过《Android开发艺术探索》的学习可以极大地提高开发者的Android技术水平,从而更加高效地成为高级开发者。而对于高级开发者来说,仍然...
实现手势识别,有源码,有效果可看。 自己之前不明白,在学习过程中,逐渐弄清楚的,也就是在写这些源码的过程中逐渐弄清楚的。这些源码都是学习的过程,希望对你们有帮助。
刚接触Android的时候看到别人写的手势密码view,然后当时就在想,我什么时候才能写出如此高端的东西?? 没关系,不要怕哈,说出这样话的人不是你技术不咋地而是你不愿意花... android:id=@+id/id_gesture_pwd android
本文是手势识别输入事件处理的完整学习记录。内容包括输入事件InputEvent响应方式,触摸事件MotionEvent的概念和使用,触摸事件的动作分类、多点触摸。根据案例和API分析了触摸手势Touch Gesture的识别处理的一般...
android手势学习demo
完整的实现了通过手势控制tabhost里面活动的切换 对于刚刚学习android的人来说可以算是不错的资源 欢迎交流
SmartHome-XJTU本项目用手势和语音来控制智能家电,手势的载体是智能手环,语音的...This project is developed for control smart home devices through gesture and humun voice based on smart watch and android.
如果您有兴趣学习它的创建方式,请。 implementation ' me.saket:inboxrecyclerview:2.3.0 ' 用法 布局 < me .saket.inboxrecyclerview.page.ExpandablePageLayout android : layout_width = " match_parent ...