Android-手势识别(自定义手势识别:四种自定义手势)

1.回顾

上篇实现:

(1)OnTouchListener 实现 上下左右手势识别

(2)OnTouchListener + SimpleOnGestureListener + GestureDetector 实现 上下左右 手势识别

2.重点

(1)GestureOverlayView + GestureLibrary + OnGesturePerformedListener 实现 自定义手势识别

(2)demo 下载

3.效果图

4. 基本步骤

(1)自定义手势识别文件

(2)加载 手势文件

(3)布局实现

(4)识别/读取 手势

5. 自定义手势文件

5.1 新建 Android Simple Project

以eclipse为例:File  -> New -> Other -> Android -> Android Simple Project ;

5.2 Next 选择安卓版本

5.3 Next 选择 GestureBuilder

5.4 finish

右击 运行工程 -> 运行后 点击 -> add gesture -> 画上你自己定义的手势 -> 起个名字(记住 需要使用)-> done ;

 
     

5.5 取得 gestrue 手势文件

当点击done ->  显示 Toast 提醒 文件地址 -> 保存在sdcard 里,自己导出即可 ;

6.加载gestrue 手势文件

(1)在  res 文件夹下 新建 raw 文件夹;

(2)复制gesture 到raw 文件夹下 ;

(3)在onCreate 里加载

private GestureLibrary library;
//加载手势文件
	    library=GestureLibraries.fromRawResource(MainActivity.this,R.raw.gestures);
		library.load();

7. 布局实现

(1)在 布局文件中 添加 GestureOverlayView ,可以 将你自己的 控件 放在 布局里面;

(2)实例:

<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"
    tools:context="${relativePackage}.${activityClass}" >

    <android.gesture.GestureOverlayView
        android:id="@+id/gestureOverlayView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        >

          <ImageView
        android:id="@+id/img_test"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
          android:layout_gravity="center"
        android:src="@drawable/icon_location" />

          <TextView
              android:id="@+id/textView1"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginTop="20dp"
             android:layout_gravity="center|top"
              android:text="没有滑动"
              android:textColor="#0000ff"
              android:textSize="25sp" />

    </android.gesture.GestureOverlayView>

</RelativeLayout>

8. 识别手势

(1)实现OnGesturePerformedListener 监听

	/**
	 * 第三中方式 自定义方式
	 *
	 */

	//设置监听
	class gestureOverlayListener implements OnGesturePerformedListener{

		@Override
		public void onGesturePerformed(GestureOverlayView overlay,
				Gesture gesture) {
			//识别手势: 通过 library 读取手势文件 ,在这里读取
			ArrayList<Prediction> predictions=library.recognize(gesture);
			//去第一个就 是 取到的第一个
			Prediction prediction=predictions.get(0);

			//提示值
			String str="没有改手势";
			//更加相似度 来 取得 区间(0.0~10.0 大致区间)
			if(prediction.score>=5.0){
				//通过 name 来判断 值
				if(prediction.name.equals("error")){
					str="error:很遗憾,错的!";
					img_test.setImageResource(R.drawable.icon_error);
				}else if(prediction.name.equals("light")){

					str="light:我是闪电";
					img_test.setImageResource(R.drawable.icon_light);

				}else if(prediction.name.equals("none")){

					str="none :什么都没有";
					img_test.setImageResource(R.drawable.icon_none);

				}else if(prediction.name.equals("right")){

					str="true : 恭喜你答对了!";
					img_test.setImageResource(R.drawable.icon_true);
				}

			}
		    textView1.setText(str);
			Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();

		}
	}
	

(2)初始化控件 和 添加监听

	gestureOverlayView1=(GestureOverlayView) findViewById(R.id.gestureOverlayView1);
		//添加
		gestureOverlayView1.addOnGesturePerformedListener(new gestureOverlayListener());

9.demo 下载

http://download.csdn.net/detail/lablenet/9063867

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 04:30:23

Android-手势识别(自定义手势识别:四种自定义手势)的相关文章

Android——数据存储(四种方式之一)SharedPrefereces

Android--数据存储(四种方式) 1.SharedPrefereces   轻量级.XML  存储文件名,数据保存在data/data/basepackage/shared_prefs/myopt.xml中   实例-收藏-记住密码自动登录 //一种轻量级的数据存储方式//通过KEY 存入数据--putxxxx(key,value) 取出数据--getxxxx(key  default)   2.读写SD卡  SD的根目录  适用于数据流读写 3.SQLite  轻量级.dp文件多用于手机

Android入门:Activity四种启动模式

Android入门:Activity四种启动模式 一.启动模式介绍 启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置: 启动模式有4种,分别为standard.singleTop.singleTask.singleInstance: 讲解启动模式之前,有必要先讲解一下“任务栈”的概念; 任务栈 每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity

android在代码中四种设置控件背景颜色的方法(包括RGB)

转载请注明出处: http://blog.csdn.net/fth826595345/article/details/9208771  TextView tText=(TextView) findViewById(R.id.textv_name); //第1种: tText.setTextColor(android.graphics.Color.RED);//系统自带的颜色类 // 第2种: tText.setTextColor(0xffff00ff);//0xffff00ff是int类型的数据

android 定位一般有四种方法

android 定位一般有四种方法,这四种方式分别是:GPS定位,WIFI定准,基站定位,AGPS定位,                             (1)Android GPS:需要GPS硬件支持,直接和卫星交互来获取当前经纬度,这种方式需要手机支持GPS模块(现在大部分的智能机应该都有了).通过GPS方式准确度是最高的,但是它的缺点也非常明显:1,比较耗电:2,绝大部分用户默认不开启GPS模块:3,从GPS模块启动到获取第一次定位数据,可能需要比较长的时间:4,室内几乎无法使用.

Android——数据存储(四种方式之二)读写SD卡

Android--数据存储(四种方式) 1.SharedPrefereces 只能保存一些简单的数轻量级.XML  存储文件名, 数据保存在data/data/basepackage/shared_prefs/myopt.xml中    实例-收藏-记住密码自动登录 //一种轻量级的数据存储方式//通过KEY 存入数据--putxxxx(key,value) 取出数据--getxxxx(key  default) 2.读写SD卡  SD的根目录  适用于数据流读写 实现步骤:加入读写SD卡权限

Android之Activity的四种启动模式

当应用运行起来后就会开启一条线程,线程中会运行一个任务栈,当Activity实例创建后就会放入任务栈中.Activity启动模式的设置在AndroidManifest.xml文件中,通过配置Activity的属性android:launchMode=""设置. 1. Standared模式(默认) 我们平时直接创建的Activity都是这种模式的Activity,这种模式的Activity的特点是:只要你创建了Activity实例,一旦激活该Activity,则会向任务栈中加入新创建的

Android的taskAffinity对四种launchMode的影响

在Android系统中,一个application的所有Activity默认有一个相同的affinity(亲密关系,相似之处).也就是说同一个应用程序的的所有Activity倾向于属于同一个task.但是我们并不能说Android里一个应用程序只有一个任务栈.笔者今天针对当taskAffinity不同时,四种launchMode下在打开一个新的Activity时是否会建立一个新的任务栈做了实验. 基本的代码如下: AndroidManifest.xml: MainActivity的代码 pack

Android中Activity的四种启动方式

谈到Activity的启动方式必须要说的是数据结构中的栈.栈是一种只能从一端进入存储数据的线性表,它以先进后出的原则存储数据,先进入的数据压入栈底,后进入的数据在栈顶.需要读取数据的时候就需要从顶部开始读取数据,栈具有记忆功能,对栈的操作不需要指针的约束.在Android中Activity的显示其实就是一个入栈和出栈的过程.当打开一个Activity的时候Activity入栈,当关闭一个Activity的时候Activity出栈,用户操作的Activity位于栈顶,一般情况下,一个应用程序对应一

Android学习—Button的四种OnClick响应方法

在Android或Java开发中,对于button的OnClickListener有下面四种实现方式,可以根据需要选择合适的用法. 方法一: 适合场景:通用  Button bt_Demo = (Button)findViewById(R.id.bt_Demo);  bt_Demo.setOnClickListener(new OnClickListener()  {   @Override   public void onClick(View v)   {    //响应Clicked事件