android手势创建及识别
使用一些浏览器或者输入法应用时会有一些手势操作,还可以自定义手势。这些神奇的操作是怎么做的呢?这一篇重点记录手势的识别和创建。这篇的内容使用到的是android.gesture包,具体的例子参考的是Sample中GestureBuilder程序。
1、手势创建
手势创建主要用到GestureOverlayView和GestureLibrary。GestureOverlayView的父类为android.widget.FrameLayout,是手势绘图区。GestureLibrary类主要对手势进行保存、删除等操作的,存放手势的仓库。下面给出创建手势的例子,如下图,可以定义如图手势打开csdn.net
1.1、创建绘图区
GestureOverlayView overlay = (GestureOverlayView) findViewById(R.id.gestures_overlay);overlay.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE); overlay.setFadeOffset(2000); //多笔画每两次的间隔时间overlay.setGestureColor(Color.CYAN);//画笔颜色overlay.setGestureStrokeWidth(6);//画笔粗细值overlay.addOnGestureListener(new GesturesProcessor());
1.2、监听绘制
private class GesturesProcessor implements GestureOverlayView.OnGestureListener {public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) {mDoneButton.setEnabled(false);mGesture = null;}public void onGesture(GestureOverlayView overlay, MotionEvent event) {}public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {mGesture = overlay.getGesture();if (mGesture.getLength() < LENGTH_THRESHOLD) {overlay.clear(false);}mDoneButton.setEnabled(true);}public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) {}}
1.3、保存手势
public void addGesture(View v) {if (mGesture != null) {final TextView input = (TextView) findViewById(R.id.gesture_name);final CharSequence name = input.getText();if (name.length() == 0) {input.setError(getString(R.string.error_missing_name));return;}/*** 获取手势库* private final File mStoreFile = new File(Environment.getExternalStorageDirectory(), "gestures");* GestureLibrary sStore = GestureLibraries.fromFile(mStoreFile);* */final GestureLibrary store = GestureBuilderActivity.getStore();store.addGesture(name.toString(), mGesture);store.save();setResult(RESULT_OK);final String path = new File(Environment.getExternalStorageDirectory(),"gestures").getAbsolutePath();Toast.makeText(this, getString(R.string.save_success, path), Toast.LENGTH_LONG).show();} else {setResult(RESULT_CANCELED);}finish();}
2、手势识别
public class GesturePerformedActivity extends Activity {private final File mStoreFile = new File(Environment.getExternalStorageDirectory(), "gestures");// 手势库GestureLibrary mGestureLib;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.gesture_perform);// 手势画板GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures_overlay);gestures.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE);gestures.setFadeOffset(2000); // 多笔画每两次的间隔时间gestures.setGestureColor(Color.CYAN);// 画笔颜色gestures.setGestureStrokeWidth(6);// 画笔粗细值// 手势识别的监听器gestures.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {@Overridepublic void onGesturePerformed(GestureOverlayView overlay,Gesture gesture) {// 从手势库中查询匹配的内容,匹配的结果可能包括多个相似的结果,匹配度高的结果放在最前面ArrayList<Prediction> predictions = mGestureLib.recognize(gesture); if (predictions.size() > 0) {Prediction prediction = (Prediction) predictions.get(0);// 匹配的手势if (prediction.score > 1.0) { // 越匹配score的值越大,最大为10Toast.makeText(GesturePerformedActivity.this,prediction.name, Toast.LENGTH_SHORT).show();}}}});if (mGestureLib == null) {mGestureLib = GestureLibraries.fromFile(mStoreFile);mGestureLib.load();}}}
示例下载
最后还有点问题,就是多笔画识别问题,这里没有很好的解决,使用OnGesturePerformedListener接听结束,有的多笔画会识别失败,尤其简单的横线竖线组合,复杂的却没有问题。如果使用GestureOverlayView.OnGestureListener监听结束,每一笔画都会调用,不能处理未知笔画数的识别。如果哪位同学完美解决了多笔画问题,请多指教,谢谢。
android手势创建及识别相关推荐
- android 手势开发,Android开发之——手势识别
前言 使用浏览器或者输入法应用时会有一些手势操作,还可以自定义手势.这些神奇的操作是怎么做的呢?这一篇重点记录手势的识别和创建.这篇的内容使用到了android.gesture包,具体的例子参考的是S ...
- Android中添加和识别手势操作
实现思路:将手势写入GestureLibrary中,对其他手势进行匹配对比,进行识别 先在布局中加入GestureOverlayView组件 <android.gesture.GestureOv ...
- Android园区部队人脸识别源码门禁项目讲解
Android园区部队人脸识别源码门禁项目讲解 这边搞人脸识别相关项目有一段时间,今天抽时间讲述一个经典的人脸识别项目:部队人脸识别门禁系统. 大家都知道部队对人员管理安全要求是相当高的,很多保密的技 ...
- android手势操作滑动效果触摸屏事件处理
2019独角兽企业重金招聘Python工程师标准>>> 很多时候,利用触摸屏的Fling.Scroll等Gesture(手势)操作来操作会使得应用程序的用户体验大大提升,比如用Scr ...
- android手势密码源码,Android自定义UI手势密码改进版源码下载
在之前文章的铺垫下,再为大家分享一篇:Android手势密码,附源码下载,不要错过. 先看第一张图片的布局文件 activity_main.xml xmlns:tools="http://s ...
- Android手势密码view笔记(一)
前言:不知不觉已经在这座陌生又熟悉的城市呆了一年多了,说不出什么感觉,可是即使是自己感觉自己没什么变化,但是周围的事物却不断的在变,不知道自己选择的路未来如何,但是当下我还是会努力.努力.再努力的,加 ...
- android手势密码csdn,Android手势密码LockPatternView、LockPasswordUtils、LockPatternUtils等分析...
Android手势密码LockPatternView.LockPasswordUtils.LockPatternUtils 在使用别人写的这个手势密码的时候,我们通常是有自己的需求,可能这里的代码很多 ...
- android 动态人脸识别码,Android开发中人脸识别(静态)
知道没有妹纸,你们是不会看的.先放效果图 最近,项目中需要用到人脸识别,苦于无奈,各种百度,google有关Android开发中人脸识别的内容,最终发现Android官方自带的FaceDetector ...
- Android手势GestureDetector分析(一)——应用
(1)背景 当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch ...
最新文章
- UVa978 - Lemmings Battle!(优先级队列)
- suse linux mysql下载_SUSE Linux安装MySQL
- 详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()
- 性能测试(05)-表达式和业务关联-json关联
- c语言贪吃蛇最简单,熬书几个月,终于编出简易的贪吃蛇了,VS2013
- 录制视频显示的视频角度和拍摄角度保持一致
- Vue——进阶(过滤器、数据交互、生命周期、ES6语法)
- oracle中sequence详解
- 【codevs1034】家园——网络流
- 春节档影片的成本各是多少?
- 数据增强-Data Augmentain
- 奇迹mu服务器最新,【奇迹MU网单服务端】2020新版S6EP3带终极爆炫版带七彩宝石傻瓜式一键安装客户端带GM管理工具...
- 嵌入式工程师面试题集-MCU_STM32
- 解压文件时文件名出现菱形问号������解决方案
- android公司 年终总结,Android小白之2017年终总结
- TokenInsight 对话首席——市场回暖,挖矿or买币?(完整稿)
- mif 文件格式记录
- php 判断当前手机类型_PHP 判断当前访问设备是电脑还是手机
- WIFI 的 传输信道 与标准 WIFI的频道 传输能力
- 计算机金融专业美国学校排名,美国十大最有前景的专业|第一名不是计算机和金融...