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();}}}
![](/assets/blank.gif)
![](/assets/blank.gif)
示例下载
最后还有点问题,就是多笔画识别问题,这里没有很好的解决,使用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 ...
最新文章
- GitLab 密码重设
- fiddler不能监听 localhost和 127.0.0.1的问题 .
- 第六章---机器学习与数据建模
- 快速排序算法_常用排序算法之快速排序
- 神策 2020 数据驱动用户大会报名开启
- LeetCode 97: 交错字符串
- 如何用Pygame写游戏(十五)
- File类的创建功能
- #216. 最小花费最短路
- 征途2助手网关服务器,【征途2】官方网站-《征途2》夏日激情来袭,清凉一夏版本送限定套装...
- Windows系统如何删除远程桌面连接记录
- Android 屏幕适配方案
- excel 将科学计数法的格式换成文本
- 组台式计算机配置清单整套,组装台式电脑配置清单有哪些 台式电脑什么配置好...
- #define 喵 int_发现这个领养日,狗子觉得不能让喵独占鳌头
- 通过PHP保存图片到mysql,如何使用MySQL保存一个图片并且用PHP得到它
- STM32普通IO模拟SPI和W25Q32通信调试
- RGB与HSI的关系
- 2016Android公司面试题
- ABAP CDS(Core Data Service)的创建和使用
热门文章
- Okhttp 与 Retrofit的简单介绍及两者间的联系
- 入门微信小程序[第六篇]微信小程序 -- 大樱桃的安排
- C#的变量、数据类型转换、转义符
- 动画 - 收藏集 - 掘金
- 跳打开hdu 1208 (DP)
- WORD中插入的公式与文字对不齐——公式比文字高——文字比公式低
- 2012-10-29 → 2012-11-11 周总结:项目试运行(考验的时候到了),总算解决了WCF慢的问题了...
- 读懂LinkedList这一篇就够了
- 在datagrid中的toolbar添加输入框
- 2018年宝鸡市三检文科数学题目解答