使用一些浏览器或者输入法应用时会有一些手势操作,还可以自定义手势。这些神奇的操作是怎么做的呢?这一篇重点记录手势的识别和创建。这篇的内容使用到的是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. GitLab 密码重设
  2. fiddler不能监听 localhost和 127.0.0.1的问题 .
  3. 第六章---机器学习与数据建模
  4. 快速排序算法_常用排序算法之快速排序
  5. 神策 2020 数据驱动用户大会报名开启
  6. LeetCode 97: 交错字符串
  7. 如何用Pygame写游戏(十五)
  8. File类的创建功能
  9. #216. 最小花费最短路
  10. 征途2助手网关服务器,【征途2】官方网站-《征途2》夏日激情来袭,清凉一夏版本送限定套装...
  11. Windows系统如何删除远程桌面连接记录
  12. Android 屏幕适配方案
  13. excel 将科学计数法的格式换成文本
  14. 组台式计算机配置清单整套,组装台式电脑配置清单有哪些 台式电脑什么配置好...
  15. #define 喵 int_发现这个领养日,狗子觉得不能让喵独占鳌头
  16. 通过PHP保存图片到mysql,如何使用MySQL保存一个图片并且用PHP得到它
  17. STM32普通IO模拟SPI和W25Q32通信调试
  18. RGB与HSI的关系
  19. 2016Android公司面试题
  20. ABAP CDS(Core Data Service)的创建和使用

热门文章

  1. Okhttp 与 Retrofit的简单介绍及两者间的联系
  2. 入门微信小程序[第六篇]微信小程序 -- 大樱桃的安排
  3. C#的变量、数据类型转换、转义符
  4. 动画 - 收藏集 - 掘金
  5. 跳打开hdu 1208 (DP)
  6. WORD中插入的公式与文字对不齐——公式比文字高——文字比公式低
  7. 2012-10-29 → 2012-11-11 周总结:项目试运行(考验的时候到了),总算解决了WCF慢的问题了...
  8. 读懂LinkedList这一篇就够了
  9. 在datagrid中的toolbar添加输入框
  10. 2018年宝鸡市三检文科数学题目解答