Android学习笔记_28_手势识别
一、准备手势库:
使用SDK自带例子GestureBuilder建立手势库(位置:android-sdk-windows\samples\android-10\GestureBuilder)。使用GestureBuilder之前,你需要恢复其到开发环境,将其他正确项目下的".classpath",".project"和"project.properties"三个文件拷贝到GestureBuilder项目下,导入到开发环境,然后进行编绎并部署到手机上。此时,就可以使用GestureBuilder建立手势库,生成的手势库文件在SCDard上,默认文件名称为:gestures。
二、开发:
1、配置文件:
在配置文件中加入拨打电话权限,后面用到打电话。
<!-- 拨打电话 --><uses-permission android:name="android.permission.CALL_PHONE"/>
布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><!--gestureStrokeType:可以设置单笔识别或多笔识别layout_weight:优先级别默认为0,最高为0,次之1...。显示界面时,先测量按钮的高度,然后再用窗口高度减去按钮高度,所得的高度设置到手势界面--><android.gesture.GestureOverlayViewandroid:id="@+id/gestures"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_above="@+id/btnCheck"android:layout_weight="1"android:gestureStrokeType="multiple" /><Buttonandroid:id="@+id/btnCheck"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentLeft="true"android:layout_marginBottom="5dp"android:layout_weight="0"android:onClick="match"android:text="@string/check" /> </RelativeLayout>
2、后台代码:
package com.example.gesture;import java.util.List;import android.R.anim; import android.app.Activity; import android.content.Intent; import android.gesture.Gesture; import android.gesture.GestureLibraries; import android.gesture.GestureLibrary; import android.gesture.GestureOverlayView; import android.gesture.GestureOverlayView.OnGestureListener; import android.gesture.Prediction; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MotionEvent; import android.view.View; import android.widget.Toast;public class MainActivity extends Activity {private static final String TAG="Gesture";private GestureOverlayView gestureOverlayView;private GestureLibrary mLibrary;private boolean state;private Gesture gesture;//用户最终画完手势 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);state = mLibrary.load();//加载手势库Log.i(TAG, state+"");gestureOverlayView = (GestureOverlayView)this.findViewById(R.id.gestures);//当用户完成一次Gesture绘制后,系统将自动调用Listener对象的onGesturePerformed()方法,只支持单笔手势//gestureOverlayView.addOnGesturePerformedListener(new GestureListener());//可以监听单笔和多笔识别gestureOverlayView.addOnGestureListener(new MyGestureListener());}public void match(View v){matchGesture(gesture);gestureOverlayView.clear(true);}//单多笔监视private final class MyGestureListener implements OnGestureListener{@Overridepublic void onGesture(GestureOverlayView overlay, MotionEvent event) {Log.i(TAG, "onGesture() ... ");}@Overridepublic void onGestureCancelled(GestureOverlayView overlay,MotionEvent event) {Log.i(TAG, "onGestureCancelled() ... ");}@Overridepublic void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {Log.i(TAG, "onGestureEnded() ... ");gesture=overlay.getGesture();}@Overridepublic void onGestureStarted(GestureOverlayView overlay,MotionEvent event) {Log.i(TAG, "onGestureStarted() ... ");}}//单笔手势监听类private final class GestureListener implements GestureOverlayView.OnGesturePerformedListener{@Overridepublic void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {if(state){matchGesture(gesture);}}}private void matchGesture(Gesture gesture) {//123:对号,258:X,369:李,456:Z//从手势库中查询匹配的内容,匹配的结果可能包括多个相似的结果,匹配度高的结果放在最前面List<Prediction> predictions = mLibrary.recognize(gesture);if(!predictions.isEmpty()){Prediction prediction = predictions.get(0);//prediction的score属性代表了与手势的相似程度//prediction的name代表手势对应的名称if(prediction.score > 6){if("123".equals(prediction.name)){Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:159016"));startActivity(intent);}else if ("456".equals(prediction.name)) {finish();//关闭activity,会触发onDestroy方法,进而关闭应用}else if ("369".equals(prediction.name)) {Toast.makeText(getApplicationContext(), "结果:李", Toast.LENGTH_LONG).show();}else if ("258".equals(prediction.name)) {Toast.makeText(getApplicationContext(), "结果:X", Toast.LENGTH_LONG).show();}}else {Toast.makeText(getApplicationContext(), R.string.notfull, Toast.LENGTH_LONG).show();}}else{Toast.makeText(getApplicationContext(), R.string.notfind, Toast.LENGTH_LONG).show();}}@Overrideprotected void onDestroy() {//杀掉进程super.onDestroy();android.os.Process.killProcess(android.os.Process.myPid());//关闭应用 }@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}}
转载于:https://www.cnblogs.com/lbangel/p/3463800.html
Android学习笔记_28_手势识别相关推荐
- Android学习笔记21:ImageView获取网络图片
Android平台有3种网络接口可以使用,它们分别是:java.net.*(标准java接口).org.apache(Apache接口)和android.net.*(Android网络接口).本文将使 ...
- Android学习笔记(七):多个Activity和Intent
根据www.mars-droid.com:Andriod开发视频教学,先跳过书本<Beginning Android 2>的几个章,我是这两个资源一起看,需要进行一下同步.先初步了解一下应 ...
- Android学习笔记26:图片切换控件ImageSwitcher的使用
在Windows操作系统中,要查看多张图片,可以通过使用"Windows照片查看器"在"上一张"和"下一张"之间切换,进行多张图片的浏览. ...
- Android学习笔记36:使用SQLite方式存储数据
在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...
- Pro Android学习笔记(二九):用户界面和控制(17):include和merge
xml控件代码重用:include 如果我们定义一个控件,需要在不同的layout中重复使用,或者在同一个layout中重复使用,可以采用include的方式.例如定义my_button.xml如下 ...
- Android学习笔记:TabHost 和 FragmentTabHost
2019独角兽企业重金招聘Python工程师标准>>> Android学习笔记:TabHost 和 FragmentTabHostTabHost命名空间:android.widget ...
- 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge
目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...
- Android学习笔记:TabHost 和 FragmentTabHost(转)
Android学习笔记:TabHost 和 FragmentTabHost(转) 转自:http://www.cnblogs.com/asion/p/3339313.html 作者:Asion Tan ...
- Pro Android学习笔记(三三):Menu(4):Alternative菜单
什么是Alternative menu(替代菜单) 举个例子,Activity显示一个文本文件.如果用户想对文本文件进行编辑,Activity不提供编辑能力,但可由其他activity或者其他应用提供 ...
最新文章
- 服务器用户没有读取权限,Windows找不到文件或没有读取权限怎么办
- Nginx在Windows系统和Linux系统下的重启
- CMake3:添加一个库
- 【算法分析与设计】计数排序
- Permission denied的解决办法
- Python colormap库的安装和使用
- 麦步手表编程纪实(1)
- js 正则表达式详细基础教程
- 【uni-app】uni-app移动端开发 - 登录界面
- win7 旗舰版系统激活方法
- URAL 1742 Team building 强联通
- Session.Abandon()的用法
- 法外狂徒——格雷福斯
- 我的天,《扶摇》的海报也太好看了吧
- 大白话之哈希表和哈希算法
- jieba分词词性标注含义
- laya 学习抛出事件与接收事件
- cesium中级(二)获取地形高度
- 自定义 View 之联系人字母索引及定位效果
- 反激式开关电源技术归纳(上)
热门文章
- 四川一度智信|小白卖家不懂选品?
- matlab仿真单关节机器人,用MATLAB玩转机器人--第六章 用MATLAB玩转单关节机器人
- android开发-指纹识别
- 九 iOS之 图片剪裁
- webdriver options常用参数
- 琼斯是计算体心立方弹性模量_固体物理 课后习题解答(黄昆版)第二章
- 安卓物联网APP开发——基于编辑物联网平台环境实现远程控制数据传输
- html选择按键点击后锁死输入框_js Dom为页面中的元素绑定键盘或鼠标事件
- python :turtle画笔设置函数
- mysql异地灾备架构_最佳实践 数据库异地灾备