一、准备手势库:

  使用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_手势识别相关推荐

  1. Android学习笔记21:ImageView获取网络图片

    Android平台有3种网络接口可以使用,它们分别是:java.net.*(标准java接口).org.apache(Apache接口)和android.net.*(Android网络接口).本文将使 ...

  2. Android学习笔记(七):多个Activity和Intent

    根据www.mars-droid.com:Andriod开发视频教学,先跳过书本<Beginning Android 2>的几个章,我是这两个资源一起看,需要进行一下同步.先初步了解一下应 ...

  3. Android学习笔记26:图片切换控件ImageSwitcher的使用

    在Windows操作系统中,要查看多张图片,可以通过使用"Windows照片查看器"在"上一张"和"下一张"之间切换,进行多张图片的浏览. ...

  4. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

  5. Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    xml控件代码重用:include 如果我们定义一个控件,需要在不同的layout中重复使用,或者在同一个layout中重复使用,可以采用include的方式.例如定义my_button.xml如下 ...

  6. Android学习笔记:TabHost 和 FragmentTabHost

    2019独角兽企业重金招聘Python工程师标准>>> Android学习笔记:TabHost 和 FragmentTabHostTabHost命名空间:android.widget ...

  7. 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...

  8. Android学习笔记:TabHost 和 FragmentTabHost(转)

    Android学习笔记:TabHost 和 FragmentTabHost(转) 转自:http://www.cnblogs.com/asion/p/3339313.html 作者:Asion Tan ...

  9. Pro Android学习笔记(三三):Menu(4):Alternative菜单

    什么是Alternative menu(替代菜单) 举个例子,Activity显示一个文本文件.如果用户想对文本文件进行编辑,Activity不提供编辑能力,但可由其他activity或者其他应用提供 ...

最新文章

  1. 服务器用户没有读取权限,Windows找不到文件或没有读取权限怎么办
  2. Nginx在Windows系统和Linux系统下的重启
  3. CMake3:添加一个库
  4. 【算法分析与设计】计数排序
  5. Permission denied的解决办法
  6. Python colormap库的安装和使用
  7. 麦步手表编程纪实(1)
  8. js 正则表达式详细基础教程
  9. 【uni-app】uni-app移动端开发 - 登录界面
  10. win7 旗舰版系统激活方法
  11. URAL 1742 Team building 强联通
  12. Session.Abandon()的用法
  13. 法外狂徒——格雷福斯
  14. 我的天,《扶摇》的海报也太好看了吧
  15. 大白话之哈希表和哈希算法
  16. jieba分词词性标注含义
  17. laya 学习抛出事件与接收事件
  18. cesium中级(二)获取地形高度
  19. 自定义 View 之联系人字母索引及定位效果
  20. 反激式开关电源技术归纳(上)

热门文章

  1. 四川一度智信|小白卖家不懂选品?
  2. matlab仿真单关节机器人,用MATLAB玩转机器人--第六章 用MATLAB玩转单关节机器人
  3. android开发-指纹识别
  4. 九 iOS之 图片剪裁
  5. webdriver options常用参数
  6. 琼斯是计算体心立方弹性模量_固体物理 课后习题解答(黄昆版)第二章
  7. 安卓物联网APP开发——基于编辑物联网平台环境实现远程控制数据传输
  8. html选择按键点击后锁死输入框_js Dom为页面中的元素绑定键盘或鼠标事件
  9. python :turtle画笔设置函数
  10. mysql异地灾备架构_最佳实践 数据库异地灾备