使用一些浏览器或者输入法应用时会有一些手势操作,还可以自定义手势。这些神奇的操作是怎么做的呢?这一篇重点记录手势的识别和创建。这篇的内容使用到的是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();}}}

示例下载

/**
* @author 张兴业

* http://blog.csdn.net/xyz_lmn
* 我的新浪微博:@张兴业TBOW
*/

最后还有点问题,就是多笔画识别问题,这里没有很好的解决,使用OnGesturePerformedListener接听结束,有的多笔画会识别失败,尤其简单的横线竖线组合,复杂的却没有问题。如果使用GestureOverlayView.OnGestureListener监听结束,每一笔画都会调用,不能处理未知笔画数的识别。如果哪位同学完美解决了多笔画问题,请多指教,谢谢。

 

android手势创建及识别相关推荐

  1. android 手势开发,Android开发之——手势识别

    前言 使用浏览器或者输入法应用时会有一些手势操作,还可以自定义手势.这些神奇的操作是怎么做的呢?这一篇重点记录手势的识别和创建.这篇的内容使用到了android.gesture包,具体的例子参考的是S ...

  2. Android中添加和识别手势操作

    实现思路:将手势写入GestureLibrary中,对其他手势进行匹配对比,进行识别 先在布局中加入GestureOverlayView组件 <android.gesture.GestureOv ...

  3. Android园区部队人脸识别源码门禁项目讲解

    Android园区部队人脸识别源码门禁项目讲解 这边搞人脸识别相关项目有一段时间,今天抽时间讲述一个经典的人脸识别项目:部队人脸识别门禁系统. 大家都知道部队对人员管理安全要求是相当高的,很多保密的技 ...

  4. android手势操作滑动效果触摸屏事件处理

    2019独角兽企业重金招聘Python工程师标准>>> 很多时候,利用触摸屏的Fling.Scroll等Gesture(手势)操作来操作会使得应用程序的用户体验大大提升,比如用Scr ...

  5. android手势密码源码,Android自定义UI手势密码改进版源码下载

    在之前文章的铺垫下,再为大家分享一篇:Android手势密码,附源码下载,不要错过. 先看第一张图片的布局文件 activity_main.xml xmlns:tools="http://s ...

  6. Android手势密码view笔记(一)

    前言:不知不觉已经在这座陌生又熟悉的城市呆了一年多了,说不出什么感觉,可是即使是自己感觉自己没什么变化,但是周围的事物却不断的在变,不知道自己选择的路未来如何,但是当下我还是会努力.努力.再努力的,加 ...

  7. android手势密码csdn,Android手势密码LockPatternView、LockPasswordUtils、LockPatternUtils等分析...

    Android手势密码LockPatternView.LockPasswordUtils.LockPatternUtils 在使用别人写的这个手势密码的时候,我们通常是有自己的需求,可能这里的代码很多 ...

  8. android 动态人脸识别码,Android开发中人脸识别(静态)

    知道没有妹纸,你们是不会看的.先放效果图 最近,项目中需要用到人脸识别,苦于无奈,各种百度,google有关Android开发中人脸识别的内容,最终发现Android官方自带的FaceDetector ...

  9. Android手势GestureDetector分析(一)——应用

    (1)背景 当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch ...

最新文章

  1. UVa978 - Lemmings Battle!(优先级队列)
  2. suse linux mysql下载_SUSE Linux安装MySQL
  3. 详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON()
  4. 性能测试(05)-表达式和业务关联-json关联
  5. c语言贪吃蛇最简单,熬书几个月,终于编出简易的贪吃蛇了,VS2013
  6. 录制视频显示的视频角度和拍摄角度保持一致
  7. Vue——进阶(过滤器、数据交互、生命周期、ES6语法)
  8. oracle中sequence详解
  9. 【codevs1034】家园——网络流
  10. 春节档影片的成本各是多少?
  11. 数据增强-Data Augmentain
  12. 奇迹mu服务器最新,【奇迹MU网单服务端】2020新版S6EP3带终极爆炫版带七彩宝石傻瓜式一键安装客户端带GM管理工具...
  13. 嵌入式工程师面试题集-MCU_STM32
  14. 解压文件时文件名出现菱形问号������解决方案
  15. android公司 年终总结,Android小白之2017年终总结
  16. TokenInsight 对话首席——市场回暖,挖矿or买币?(完整稿)
  17. mif 文件格式记录
  18. php 判断当前手机类型_PHP 判断当前访问设备是电脑还是手机
  19. WIFI 的 传输信道 与标准 WIFI的频道 传输能力
  20. 计算机金融专业美国学校排名,美国十大最有前景的专业|第一名不是计算机和金融...

热门文章

  1. 微服务那么热,创业公司怎么选用实践?
  2. php扩展模块作用及中文注释
  3. 自己动手实现arm函数栈帧回溯【转】
  4. javascript中闭包的真正作用
  5. Objective-c 中 nil, Nil, NULL和NSNull的区别
  6. c#app.config配置文件使用
  7. Windows 8功能预测
  8. sqlplus 乱码的资料
  9. 排毒食物 红糖可补血美体排毒
  10. ISA Server 2004软件防火墙相关配置