android - Gesture学习 1
16lz
2021-01-25
手势已经不是什么新鲜事物了
关于手势在android上面的应用,我想大概有这么两种
1.用户画完一个手势,然后系统识别
2.用户的动作没有完成,边画边识别
比如:我想定义一个操作,画一个M,然后系统打开music应用,这就是情况1
在list页面中,用户不断拨动list,页面跟随滚动,这是情况2
这里先总结一下情况17
==增加+获取=====================================================
用户需要在页面上加入组件GestureOverlayView
[html] view plain copy print ?
我们需要给他设置监听事件
[java] view plain copy print ?
用户输入的手势对象如何得到呢
[java] view plain copy print ?
比如:
[java] view plain copy print ?
这里可以设置single和multiple
如果你只需要识别一笔,那么single就可以了,如果不确定,那么设置成multiple
"二",就需要两笔才能画出
gesture.getStrokesCount()能得到手势的笔数
(ps:ArrayList<GestureStroke> gestureStrokeList = gesture.getStrokes();也能得到每一笔的信息)
用户画好了手势,如何保存呢
很不幸,手势不是保存到数据库中的,也不能直接保存到数据库中,它是以文件的形式存在的
[java] view plain copy print ?
获得这个Library
[java] view plain copy print ?
[java] view plain copy print ?
==查询=======================================================
下面看看如何查询
[java] view plain copy print ?
如果要获得库中所有手势,貌似只能这样
[java] view plain copy print ?
但是大多数时候我们并不关心这些
我们更关心的是,如果用户做了个手势,我想知道在库中有没有和这个手势相似的,有多相似!
[java] view plain copy print ?
Prediction里面只有两个属性,name和score
score越大,那么就与recognize的手势越接近
==修改+删除=====================================================
如果要对手势修改(貌似也没什么可改的),比如改个名字吧,那么只能先删除,再添加了
[java] view plain copy print ?
关于手势在android上面的应用,我想大概有这么两种
1.用户画完一个手势,然后系统识别
2.用户的动作没有完成,边画边识别
比如:我想定义一个操作,画一个M,然后系统打开music应用,这就是情况1
在list页面中,用户不断拨动list,页面跟随滚动,这是情况2
这里先总结一下情况17
==增加+获取=====================================================
用户需要在页面上加入组件GestureOverlayView
[html] view plain copy print ?
- <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"/>
我们需要给他设置监听事件
[java] view plain copy print ?
- GestureOverlayViewgestureOverlayView=(GestureOverlayView)findViewById(R.id.gestures_overlay);
- gestureOverlayView.addOnGestureListener(newGestureOverlayView.OnGestureListener(){
- publicvoidonGestureStarted(GestureOverlayViewoverlay,MotionEventevent){}
- publicvoidonGestureEnded(GestureOverlayViewoverlay,MotionEventevent){}
- publicvoidonGestureCancelled(GestureOverlayViewoverlay,MotionEventevent){}
- publicvoidonGesture(GestureOverlayViewoverlay,MotionEventevent){}
- });
用户输入的手势对象如何得到呢
[java] view plain copy print ?
- mGesture=gestureOverlayView.getGesture();
比如:
[java] view plain copy print ?
- if(mGesture.getLength()<LENGTH_THRESHOLD){
- gestureOverlayView.clear(false);//清除掉用户手势
- mGesture=null;
- //有些东西太短了是不行的...
- }else{
- //这样就可以了
- }
这里可以设置single和multiple
如果你只需要识别一笔,那么single就可以了,如果不确定,那么设置成multiple
"二",就需要两笔才能画出
gesture.getStrokesCount()能得到手势的笔数
(ps:ArrayList<GestureStroke> gestureStrokeList = gesture.getStrokes();也能得到每一笔的信息)
用户画好了手势,如何保存呢
很不幸,手势不是保存到数据库中的,也不能直接保存到数据库中,它是以文件的形式存在的
[java] view plain copy print ?
- GestureLibrarygestureLibrary;
获得这个Library
[java] view plain copy print ?
- gestureLibrary=GestureLibraries.fromFile(path);
[java] view plain copy print ?
- gestureLibrary.addGesture(mName,mGesture);
- gestureLibrary.save();
==查询=======================================================
下面看看如何查询
[java] view plain copy print ?
- mGestureLibrary.getGestures(entryName)
如果要获得库中所有手势,貌似只能这样
[java] view plain copy print ?
- finalSet<String>entries=mGestureLibrary.getGestureEntries();
但是大多数时候我们并不关心这些
我们更关心的是,如果用户做了个手势,我想知道在库中有没有和这个手势相似的,有多相似!
[java] view plain copy print ?
- ArrayList<Prediction>predictions=gestureLibrary.recognize(gesture);
Prediction里面只有两个属性,name和score
score越大,那么就与recognize的手势越接近
==修改+删除=====================================================
如果要对手势修改(貌似也没什么可改的),比如改个名字吧,那么只能先删除,再添加了
[java] view plain copy print ?
- gestureLibrary.removeGesture(oldOne,oldGesture);
- gestureLibrary.addGesture(newOne,newGesture);
- gestureLibrary.save();
最后别忘记save
更多相关文章
- Android中关于Notification及NotificationManger的详解
- Android(安卓)23以下 checkSelfPermission 失败记录
- Android系统gesture的识别过程浅析
- Android服务器时间校准
- 如何让ImageView的背景图片不缩放
- Developer分析Android新平台Honeycomb的优缺点
- Android应用程序模型
- Android(安卓)UI设计:ViewFlipper使图片循环滑动
- android 4实战开发:扩展用户体验